elasticsearch:短语搜索任意顺序的两个相邻单词(已分析)

时间:2014-09-04 18:20:20

标签: search elasticsearch full-text-search sphinx

问题是通过单词分析以任意顺序搜索两个相邻单词。

E.g。在Sphinx extended syntax terms中,查询字符串可以写为WordToBeAnalyzed1 NEAR/1 WordToBeAnalyzed2。然后正在分析这两个单词并且搜索引擎找到“Word1 Word2”或“Word2 Word1”,其中两个单词可以是任何形式(例如“狐狸跳跃”,“跳狐狸”,“狐狸跳跃”等等)。

阅读ES文档我无法在ES查询DSL中表达相同的搜索。

使用match_phraseslop查询时,我可以使用"WordToBeAnalyzed1 WordToBeAnalyzed2"参数向match same words in reverse order查询短语"slop": 2。但它也会匹配“Word1 SlopWord1 Word2”和“Word1 SlopWord1 SlopWord2 Word2”等不良变体。

我还尝试将span_near查询与in_order参数一起使用,但

  

span queries are term-level queries, so they have no analysis phase

如果有人能指出我解决这个问题的方法,我会很高兴。

2 个答案:

答案 0 :(得分:2)

首先通过对_analyze API的显式请求运行查询,然后执行span_near查询?

答案 1 :(得分:0)

这将起作用。

{
"query":{
    "bool":{
        "must":[
            {
                "query_string":{
                    "query":"*hello* *there*",
                    "fields":[
                        "subject"
                    ],
                    "default_operator":"and",
                }
            }]
      }
  }
}