我正在使用 elasticsearch 1.7,并且需要一种方法来标记文档与它们匹配的 query_string 查询的部分。
我一直在尝试突出显示,但发现在某些情况下它会变得有点混乱。我希望用匹配的搜索词标记该文档。
这是我正在使用的查询:(注意这是一个 ruby 哈希,稍后会被编码为 JSON)
{
query: {
query_string: {
fields: ["title^10", "keywords^4", "content"],
query: query_string,
use_dis_max: false
}
},
size: 20,
from: 0,
sort: [
{ pub_date: { order: :desc }},
{ _score: { order: :desc }}
]
}
Run Code Online (Sandbox Code Playgroud)
该query_string变量基于用户关注的主题,可能如下所示:"(the AND walking AND dead) OR (iphone) OR (video AND games)"
我是否可以使用任何选项,以便返回的文档具有与搜索词匹配的属性,例如the walking dead或(the AND walking AND dead)
如果您准备好切换到使用bool/should查询,则可以拆分每个字段上的匹配并使用命名查询,然后在结果中您将获得匹配的查询的名称。
它基本上是这样的:在bool/should查询中,您query_string为每个字段添加一个查询并命名该查询以便识别该字段(例如,title_query对于该title字段等)
{
"query": {
"bool": {
"should": [
{
"query_string": {
"fields": [
"title^10"
],
"query": "query_string",
"use_dis_max": false,
"_name": "title_query"
}
},
{
"query_string": {
"fields": [
"keywords^4"
],
"query": "query_string",
"use_dis_max": false,
"_name": "keywords_query"
}
},
{
"query_string": {
"fields": [
"content"
],
"query": "query_string",
"use_dis_max": false,
"_name": "content_query"
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
在结果中,您将看到_source另一个名为的数组下方matched_queries,其中包含与返回的文档匹配的查询名称。
"_source": {
...
},
"matched_queries": [
"title_query"
],
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
828 次 |
| 最近记录: |