带有通配符和提升的multi_match

时间:2016-07-15 16:01:07

标签: elasticsearch

我想将multi-match通配符字段一起使用,如:"fields" : [ "A*", "B*" ],。 现在,我希望任何A字段中的匹配显示高于B字段中的匹配。 所以我的假设是"fields" : [ "A*^5", "B*^1" ],应该有效。它没有,结果顺序是相同的,无论5是在A还是B上。

哦,这是亚马逊ES(v1.5.xx)。最终,我希望edgeNgram具有术语查询,但是下面的示例使用stock phrase_prefix:

更短
curl -XPUT 'http://localhost:9200/test123'
curl -XPUT http://localhost:9200/test123/type1/001 -d '{"A_01": "Solace"}'
curl -XPUT http://localhost:9200/test123/type1/002 -d '{"B_64": "Solitude"}'
curl -XGET 'http://localhost:9200/test123/_search?explain' -d '{
    "query" : {
    "multi_match": {
        "query" : "Sol",
        "fields" : [ "A*^5", "B*^1" ],
        "type" : "phrase_prefix"
    }
    }
}'

我必须忽视某些事情(简单),我很害怕。任何指针都非常赞赏!

参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-match-query.html#_literal_fields_literal_and_per_field_boosting

1 个答案:

答案 0 :(得分:0)

请以这种方式尝试:

"query":{
      "filtered":{
         "query":{
            "bool":{
               "should":[
                  {
                     "multi_match":{
                        "query":"Sol",
                        "type":"cross_fields",
                        "fields":[
                           "A*^5","B*^20"
                        ]
                     } 
                  }
               ]
            }
         }
      }
   }