一、基本概念
Elasticsearch是一款基于Lucene的搜索引擎,支持全文检索、结构化查询、分布式搜索等功能,同时还可以搭配Logstash、Kibana等组件,构建起一个完整的日志分析体系。在实际应用中,布尔搜索是elasticsearch中最重要的搜索方式之一,也是最为常见的搜索方式,它支持AND、OR、NOT、MUST、SHOULD、MUST_NOT等关键词进行搜索。
二、基础布尔搜索
在elasticsearch中可以使用bool查询进行布尔搜索,它包含must、should、must_not、filter等子查询条件。其中,must表示必须匹配的条件,should表示可以匹配也可以不匹配的条件,must_not表示必须不匹配的条件,filter表示必须匹配并且会被缓存的条件。
"query": {
"bool": {
"must": [
{"match": {"title": "search"}},
{"range": {"age": {"gte": 18}}}
],
"should": [
{"match": {"gender": "male"}},
{"match": {"keywords": "Java"}}
],
"must_not": [
{"match": {"description": "bad"}}
],
"filter": [
{"term": {"status": "published"}}
]
}
}
在上述布尔查询条件中,必须要匹配title中含有”search”的记录并且age大于等于18;可以匹配gender中含有”male”或者keywords中含有”Java”的记录;不能匹配description中含有”bad”的记录,最后只返回status为”published”的记录。
三、权重调整
在实际的搜索过程中,有时候需要根据某些条件进行权重调整,使一些重要的条件会被更多地考虑。在布尔搜索中,可以使用boost属性来调整权重,其中boost的值越大表示该条件的重要性越高。例如,我们需要查询关键词”elasticsearch”,并且将title中含有”elasticsearch”的记录权重调整为3。
"query": {
"bool": {
"should": [
{"match": {"title": {"query": "elasticsearch", "boost": 3}}},
{"match": {"content": "elasticsearch"}}
]
}
}
在上述查询中,对于匹配到的title中含有”elasticsearch”的记录,其权重为3,而对于匹配到的content中含有”elasticsearch”的记录,其权重为1。
四、范围搜索
在布尔搜索中,可以使用range查询进行范围搜索,它支持大于、大于等于、小于等于、小于等四种操作符。例如,我们需要查询age大于等于18且小于等于30的记录。
"query": {
"range": {
"age": {
"gte": 18,
"lte": 30
}
}
}
五、模糊搜索
在布尔搜索中,可以使用fuzzy查询进行模糊搜索,它可以找到与指定词条相似的词条,例如在用户输入”elasticserch”时,我们仍然能够找到title中含有”elasticsearch”的记录。
"query": {
"fuzzy": {
"title": {
"value": "elasticserch",
"fuzziness": "2"
}
}
}
在上述查询中,fuzziness的值为2,表示可以有两次错误的匹配,从而找到与”elasticsearch”相似的词条。
六、前缀搜索
在布尔搜索中,可以使用prefix查询进行前缀搜索,它可以找到以指定词条开头的词条,例如我们需要查询title以”elas”开头的记录。
"query": {
"prefix": {
"title": "elas"
}
}
在上述查询中,返回的记录中title都是以”elas”开头的。
原创文章,作者:PVYF,如若转载,请注明出处:https://www.506064.com/n/131739.html
微信扫一扫
支付宝扫一扫