一尘不染

在ElasticSearch查询中保留术语的顺序

elasticsearch

在ElasticSearch中是否有可能形成可以保留术语顺序的查询?

一个简单的例子是使用标准分析器为这些文档建立索引:

  1. 你知道要搜索
  2. 你知道搜索
  3. 知道为您搜寻

我可以查询+you +search,这将返回所有文档,包括第三个文档。

如果我只想检索按此特定顺序排列有术语的文档怎么办?我可以构成一个查询吗?

考虑到仅通过引用文本即可获得短语:("you know"检索第一和第二文档)在我看来,应该有一种方法可以保留不相邻的多个术语的顺序。

在上面的简单示例中,我可以使用邻近搜索,但这并不涵盖更复杂的情况。


阅读 340

收藏
2020-06-22

共1个答案

一尘不染

您可以使用span_near查询,它具有一个in_order参数。

{
    "query": {
        "span_near": {
            "clauses": [
                {
                    "span_term": {
                        "field": "you"
                    }
                },
                {
                    "span_term": {
                        "field": "search"
                    }
                }
            ],
            "slop": 2,
            "in_order": true
        }
    }
}
2020-06-22