这里我有两个数据放在elasticsearch中
PUT /a/b/1
{
"message": "a b"
}
PUT /a/b/2
{
"message": "b c"
}
然后,我尝试用这个查询获取数据。
GET /a/b/_search
{
"from": 0,
"highlight": {
"fields": {
"message": {}
}
},
"query": {
"bool": {
"should": [
{
"query_string": {
"_name": "query_1",
"default_operator": "AND",
"fields": [
"message"
],
"query": "a"
}
},
{
"query_string": {
"_name": "query_2",
"default_operator": "AND",
"fields": [
"message"
],
"query": "b AND c"
}
}
]
}
}
}
我所期望的是,elasticsearch应该在数据id 1上突出显示"a“,因为它与query_1匹配,但是不应该突出显示数据id 1中的"b”,因为每当消息包括“c”E 211
时,我们就会选择"b"。
这正是我所期望的
"<em>a</em> b"
我真正得到的是
"<em>a</em> <em>b</em>"
我能实现我所期望的吗?
发布于 2017-06-19 06:34:06
AFAIK,这在Elasticsearch中是不可能的。它将突出显示所有匹配的术语,而不管术语属于哪个子查询。一些接近您需要的东西是highlight_query
,但也不能工作。我能想到的唯一选择是查询两次--一次用"query_1“,然后用"query_2”,然后在客户机中组合结果。但这样做当然会影响到文件的分数。
https://stackoverflow.com/questions/44621694
复制相似问题