我已经索引了一堆文档,每个文档都包含作为嵌套文档的标记,我将其作为"inner_hits"
返回。我的查询和嵌套文档是关键字标记化的,我只对它们之间的完全匹配感兴趣。
我希望elasticsearch返回匹配的文档,并根据查询字词与嵌套文档匹配的顺序对"inner_hits"
进行排序。这可能吗?
例如,假设我的文档“ferrari”带有标签red
和car
。如果我搜索“红色跑车”的查询,我希望ES按顺序返回带有嵌套文档“red”和“car”的文档“ferrari”。
这样当我的用户搜索“红色跑车”时,我可以说:
找到 ferrari 匹配红色汽车
我不想说:
找到 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
}
}
}
}
我不得不对这些内容进行大量编辑以显示正在发生的事情,所以如果它们在语法上不正确就道歉,那么它们应该显示出要点。