Elasticsearch中多字短语的接近程度

时间:2015-01-11 15:47:43

标签: regex elasticsearch proximity

假设您有两个多字短语,一个是"快速狐狸"另一个是"懒惰的棕色"。

目标是在短语内具有0斜率并且在短语之间具有> 0斜率。这样的"快速狐狸"和"懒惰的棕色"在两个短语中没有任何额外的单词匹配,但两个短语之间可能有多个单词。

以下内容应该匹配:

  1. 快速的狐狸跳过懒惰的棕色狗
  2. 快速狐狸在懒惰的棕色狗身上跳了10英尺
  3. 快速狐狸在懒惰的棕色猫身上跳了10英尺
  4. 快速的狐狸跳过懒惰的棕色狗
  5. 但这些不会:

    1. 快速的狐狸跳过懒惰的棕色狗
    2. 快速狐狸跳过懒惰的慢棕狗
    3. 有什么想法吗?我一直在尝试使用span_near和span_multi,但还没有到达任何地方。

2 个答案:

答案 0 :(得分:0)

您要找的是短语查询。短语查询将确保只有单词保持相邻,然后匹配发生。也就是说,它只能容忍0的斜率。

{
  "query": {
    "bool": {
      "must": [
        {
          "match_phrase": {
            "text": "quick fox"
          }
        },
        {
          "match_phrase": {
            "text": "lazy brown"
          }
        }
      ]
    }
  }
}

短语查询 - http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/phrase-matching.html

答案 1 :(得分:-2)

免责声明:我刚才从未听说过Elasticsearch,并且在谷歌5分钟后得出了这个答案。

看起来不太可能为查询的字符串指定最小 slop值(虽然我可能错过了一些东西),这使得你的要求:“> 0 slop在短语之间“有点棘手。但是,这个简单的技巧可以解决您的问题:

{
    "bool": {
        "must":     { "match": "quick fox"},
        "must":     { "match": "lazy brown"},
        "must_not": { "match": "quick fox lazy brown"}
    }
}

链接:dsl string queryslop guide