2014-08-27 118 views
5

我在三个字段上使用典型的多重匹配查询:姓名,城市,州。多重匹配查询也使用Java功能分数脚本。有什么方法可以在评分脚本中知道哪些字段与我的多重匹配查询匹配?如果没有,有没有什么办法可以从SearchResponse对象中得出结论呢?找出在多重匹配查询中匹配哪些字段

我目前在Elasticsearch 1.2.1上,但如果有必要,我可以轻松升级。

回答

5

我不相信你可以直接与公正的多比赛做到这一点,但如果你添加突出显示你应该得到的回应显示哪些字段匹配:

http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/highlighting-intro.html

,在由该页面的例子:

GET /megacorp/employee/_search 
    { 
     "query" : { 
      "match_phrase" : { 
       "about" : "rock climbing" 
      } 
     }, 
     "highlight": { 
      "fields" : { 
       "about" : {} 
      } 
     } 

} 

你的match_phrase更改为multi_match并添加字段列表:

GET /megacorp/employee/_search 
    { 
     "query" : { 
      "multi_match" : { 
       "query" : "rock climbing", 
       "fields": ["about", "otherfield"] 
      } 
     }, 
     "highlight": { 
      "fields" : { 
       "about" : {}, 
       "otherfield": {} 
      } 
     } 

} 

并且应该为您提供突出显示响应,其中包括匹配文本和匹配字段周围的高亮显示。

+0

它是一个不错的选择的结果,但是这不会是从自定义脚本比分访问不是吗? – Commander 2014-08-28 15:18:40

2

还有就是要找出哪些领域在查询

匹配因为亮点是后强调处理的另一个具体的方式,这是因为它确实

只需使用命名查询的方式不准确做到这一点,而不是多比赛的

{ 
    "multi_match" : { 
     "query" : "query phrase here", 
     "fields" : [ "name", "tag", "categorys" ], 
     "operator" : "AND" 
    } 

它的名字

翻译成布尔查询
"should": [ 
     { 
      "match": { 
       "name": { 
        "query": "query phrase here", 
        "_name":"name_field" 
       } 
      } 
     },{ 
      "match": { 
       "tag":{ 
        "query": "query phrase here", 
        "_name":"tag_field" 
       } 
      } 
     },{ 
      "match": { 
       "categorys":{ 
        "query": "query phrase here", 
        "_name":"cat_field" 
       } 
      } 
     } 
    ] 

它会返回像

 { 
     "_index": "indexName", 
     "_type": "type", 
     "_id": "id", 
     "_score": 0.27836448, 
     "matched_queries": [ 
      "tag_field" 
     ] 
    }, 
    { 
     "_index": "indexName", 
     "_type": "type", 
     "_id": "id", 
     "_score": 0.27836448, 
     "matched_queries": [ 
      "name_field", 
      "tag_field" 
     ] 
    } 
+0

关于multi_match类型为“cross_fields”时如何调整它的任何建议? – rosenfeld 2018-03-06 17:56:36