我已经索引了一堆文档,每个文档都包含作为嵌套文档的标记,我将其作为 "inner_hits" 返回 . 我的查询和嵌套文档是关键字标记化的,我只对它们之间的完全匹配感兴趣 .

我希望elasticsearch返回具有匹配项的文档,并根据查询术语与嵌套文档匹配的顺序对 "inner_hits" 进行排序 . 这可能吗?

例如,假设我的文档"ferrari"带有标签 redcar . 如果我搜索查询"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
      }
    }
  }
}

我不得不大量编辑这些以显示正在发生的事情,所以如果他们在语法上不正确,他们应该表现出要点 .