我已经索引了一堆文档,每个文档都包含作为嵌套文档的标记,我将其作为 "inner_hits"
返回 . 我的查询和嵌套文档是关键字标记化的,我只对它们之间的完全匹配感兴趣 .
我希望elasticsearch返回具有匹配项的文档,并根据查询术语与嵌套文档匹配的顺序对 "inner_hits"
进行排序 . 这可能吗?
例如,假设我的文档"ferrari"带有标签 red
和 car
. 如果我搜索查询"red sports car",我希望ES按顺序返回带有嵌套文档"red"和"car"的文档"ferrari" .
这样当我的用户搜索“红色跑车”时,我可以说:
找到匹配红色汽车的法拉利
我不想说:
找到匹配车红色的法拉利
可以这样做吗?目前我恢复按分数排序的内部命中,显然我可以使用 sort
更改此内容,但我不知道如何引用查询的顺序 .
以下是映射:
{
"vehicles": {
"mappings": {
"vehicle": {
"properties": {
"name": {
"type": "text"
},
"tags": {
"type": "nested",
"properties": {
"name": {
"type": "text",
"analyzer": "tags"
}
}
}
}
}
}
}
}
这是doc的形状:
{
"_index": "vehicles",
"_type": "vehicle",
"_id": "b1013ec8b8",
"_source": {
"name": "ferrari",
"tags": [
{
"name": "car"
},
{
"name": "red"
}
]
}
}
这是查询:
{
"query":{
"nested":{
"path":"tags",
"query":{
"terms":{
"tags.name":[
"red",
"sports",
"car"
]
}
},
"inner_hits":{
"size":100
}
}
}
}
我不得不大量编辑这些以显示正在发生的事情,所以如果他们在语法上不正确,他们应该表现出要点 .