这是我参与8月更文挑战的第18天,活动详情查看:8月更文挑战;
备注:继Elasticsearch笔记(7)
match 扩展
operator(或者与并且)
- or:搜索内容分词后,只要存在一个词语匹配就展示结果
- and:搜索内容分词后,都要满足词语匹配
#POST /{index}/_doc/_search
{
"query": {
"match": {
"desc": {
"query": "xbox游戏机",
"operator": "or"
}
}
}
}
# 相当于 select * from shop where desc='xbox' or|and desc='游戏机'
minimum_should_match(最低精度搜索)
-
minimum_should_match: 最低匹配精度,至少有[分词后的词语个数]x百分百,得出一个数据值取整。举个例子:当前属性设置为
70,若一个用户查询检索内容分词后有10个词语,那么匹配度按照 10x70%=7,则desc中至少需要有7个词语匹配,就展示;若分词后有8个,则 8x70%=5.6,则desc中至少需要有5个词语匹配,就展示。 -
minimum_should_match 也能设置具体的数字,表示个数
#POST /{index}/_doc/_search { "query": { "match": { "desc": { "query": "女友生日送我好玩的xbox游戏机", "minimum_should_match": "60%" } } } } -
查询多个(依据id)
#POST /{index}/_doc/_search { "query": { "ids": { "type": "_doc", "values": ["1001", "1010", "1008"] } } }DSL搜索 - multi_match/boost
multi_match(多字段搜索)
满足使用match在多个字段中进行查询的需求
# POST /{index}/_doc/_search
{
"query": {
"multi_match": {
"query": "黄某人来着广东",
"fields": ["comfrom", "nickname"]
}
}
}
boost(搜索权重)
权重,为某个字段设置权重,权重越高,文档相关性得分就越高。通畅来说搜索商品名称要比商品简介的权重更高。
POST /{index}/_doc/_search
{
"query": {
"multi_match": {
"query": "黄某人来着广东",
"fields": ["comfrom", "nickname^10"]
}
}
}
布尔查询
可以组合多重查询
- must:查询必须匹配搜索条件,譬如 and
- should:查询匹配满足1个以上条件,譬如 or
- must_not:不匹配搜索条件,一个都不要满足
实操must:
# POST /{index}/_doc/_search
{
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "黄某人",
"fields": ["comfrom", "nickname"]
}
},
{
"term": {
"birthday": "1995-10-28"
}
}
]
}
}
}
#查询结果
{
"took": 20,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 0,
"relation": "eq"
},
"max_score": null,
"hits": []
}
}
实操should:
# POST /{index}/_doc/_search
{
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "黄某人",
"fields": ["comfrom", "nickname"]
}
},
{
"term": {
"birthday": "1995-10-28"
}
}
]
}
}
}
#查询结果
{
"took": 38,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": {
"value": 1,
"relation": "eq"
},
"max_score": 0.2876821,
"hits": [
{
"_index": "jacuesh",
"_type": "_doc",
"_id": "1001\n",
"_score": 0.2876821,
"_source": {
"id": 1001,
"age": 31,
"username": "黄某人",
"nickname": "老黄",
"comefrom": "广东省深圳市",
"sex": 1,
"birthday": "1995-10-29",
"class": "计算机科学以技术1班"
}
}
]
}
}