我在弹性搜索中有以下查询:
{
"query": {
"multi_match": {
"query": "bluefin bat",
"type": "phrase",
"fields": [
"title^5",
"body.value"
]
}
},
"highlight": {
"fields": {
"body.value": {
"number_of_fragments": 3
}
}
},
"fields": [
"title",
"id"
]
}
我尝试使用“dis_max”但是我的两个字段必须搜索相同的查询。 剩余的匹配查询具有不同的查询文本。
剩下的匹配查询是这样的:
{
"query": {
"match": {
"ingredients": "key1, key2",
"analyzer": "keyword_analyzer"
}
}
}
如何在不使用dis_max加入的情况下集成这两个查询。
答案 0 :(得分:2)
我想出了答案。 multi_match内部适用:
"dis_max"
因此,您无法将dis_max
与multi_match
一起使用。
但我可以做的是我可以应用bool
查询来解决这类问题。
我可以应用should
实际转换为OR
布尔值,或者我可以应用must
,相当于AND
。
这就是我修改查询的方式:
{
"query": {
"bool":{
"should": [
{"multi_match":
{"query": "SOME_QUERY",
"type": "phrase",
"fields": ["title^5","body"]
}
},
{
"match":{
"labels" :{
"query": "SOME_QUERY",
"analyzer": "keyword_analyzer"
}
}
},
{
"match":{
"displayName" :{
"query": "SOME_QUERY",
"fuzziness": "AUTO"
}
}
}
],
"minimum_number_should_match": "50%"
}
},
"fields": ["title","id","labels","displayName","username"],
"highlight": {
"fields": {
"body.storage.value": {
"number_of_fragments": 3}
}
}
}
我希望将来可以帮助某人。