我在三个字段上使用典型的多匹配查询:名称,城市,州.多匹配查询也使用Java函数分数脚本.有什么方法可以在得分脚本中知道哪些字段匹配我的多重匹配查询?如果没有,有没有办法从SearchResponse对象中解决这个问题?
我目前在Elasticsearch 1.2.1上,但如果有必要,我可以轻松升级.
我不相信你可以直接使用多重匹配来做到这一点,但是如果你添加突出显示,你应该得到一个响应,显示哪些字段匹配:
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" : {}
}
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将match_phrase更改为multi_match并添加字段列表:
GET /megacorp/employee/_search
{
"query" : {
"multi_match" : {
"query" : "rock climbing",
"fields": ["about", "otherfield"]
}
},
"highlight": {
"fields" : {
"about" : {},
"otherfield": {}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这应该会得到一个突出显示响应,其中包括匹配文本周围的突出显示和匹配的字段.
小智 5
还有另一种确切的方法来找出查询中匹配的字段
因为突出显示是突出显示后的过程,所以它的准确性不高
只需使用命名查询即可,而不是多次匹配
如
{
"multi_match" : {
"query" : "query phrase here",
"fields" : [ "name", "tag", "categorys" ],
"operator" : "AND"
}
Run Code Online (Sandbox Code Playgroud)
将其翻译为名称为bool的查询
"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"
}
}
}
]
Run Code Online (Sandbox Code Playgroud)
它会返回这样的结果
{
"_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"
]
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6280 次 |
| 最近记录: |