我有4种不同的映射:A
,B
,C
和D
。
对于映射A
和B
,以下查询可提供最佳结果:
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"multi_match": {
"query": "....",
"analyzer": "keyword",
"fuzziness": "AUTO",
"fields": ["name*"]
}
}
]
}
}
]
}
},
"from": 0,
"size": 20
}
对于
C
,以下查询可提供最佳结果:{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"multi_match": {
"query": "....",
"analyzer": "simple",
"fuzziness": "AUTO",
"use_dis_max": false,
"fields": ["name*"]
}
}
]
}
}
]
}
}
}
对于
D
,以下查询可提供最佳结果:{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"multi_match": {
"query": "....",
"analyzer": "simple",
"fuzziness": 0,
"use_dis_max": false,
"fields": ["name*"]
}
},
{
"multi_match": {
"query": "....",
"analyzer": "simple",
"fuzziness": 3,
"fields": ["name*"]
}
}
]
}
}
]
}
}
}
我可以进行3个单独的查询并处理结果,但结果很麻烦,而且花费时间更长。是否可以将这三个查询组合为一个查询,并说映射/类型
A
和B
使用第一个多重匹配,C
使用第二个匹配,D
使用第三个多重匹配。
最佳答案
我使用Type Query在下面想出了。
为简单起见,我仅考虑问题中提到的C
和D
类型的查询。
请注意,我还包括了boost
参数,并且以这种方式提及它,即与C
类型的文档相比,D
类型的文档在结果中总是显得更高。
您可以根据自己的要求进行更改。
询问
POST <your_index_name>/_search
{
"query":{
"bool":{
"should":[
{
"bool":{
"boost":100,
"must":[
{
"multi_match":{
"query":"....",
"analyzer":"simple",
"fuzziness":"AUTO",
"use_dis_max":false,
"fields":[
"name*"
]
}
},
{
"type":{
"value":"C"
}
}
]
}
},
{
"bool":{
"boost":5,
"must":[
{
"type":{
"value":"D"
}
},
{
"multi_match":{
"query":"....",
"analyzer":"simple",
"fuzziness":0,
"use_dis_max":false,
"fields":[
"name*"
]
}
},
{
"multi_match":{
"query":"....",
"analyzer":"simple",
"fuzziness":3,
"fields":[
"name*"
]
}
}
]
}
}
]
}
}
}
让我知道这是否有帮助!
关于elasticsearch - 一个查询中每个映射的不同多重匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53410488/