Elasticsearch:使用查询排序对内部命中进行排序

时间:2017-05-23 15:10:32

标签: elasticsearch

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

我希望elasticsearch返回匹配的文档,并根据查询字词与嵌套文档匹配的顺序对"inner_hits" 进行排序。这可能吗?

例如,假设我的文档“ferrari”带有标签redcar。如果我搜索“红色跑车”的查询,我希望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
      }
    }
  }
}

我不得不对这些内容进行大量编辑以显示正在发生的事情,所以如果它们在语法上不正确就道歉,那么它们应该显示出要点。

0 个答案:

没有答案