Elasticsearch:通用令牌组合

时间:2016-04-29 20:25:14

标签: jquery generics elasticsearch token combinations

假设我有一个由三个标记组成的字符串:abc def ghi。

我想执行查询以检索完全匹配及其变体,如:

abc ghi def(任意顺序的代币)

abc def(缺少令牌)

abc def jkl ghi(在我想要的令牌之间插入的任何令牌)

azc dzf gzz(任意数量的字符中出现错误的令牌)

也就是说,我想检索具有完全令牌,变体和正字错误的文档。

我尝试了一个匹配词组前缀查询,但它不会在首字母标记中执行正则表达式,只是在最后一个标记中。

我尝试了regexp查询,但它没有在令牌之间执行斜坡。

有人可以给我一些建议吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

假设我将下面的文档编入索引,没有特殊设置,分析器等:

PUT my_index
{
    "text": "abc def ghi"
}

然后一个简单的match就可以完成这项工作

# exact search
POST my_index/_search
{
  "query": {
    "match": {
      "text": {
        "query": "abd def ghi"
      }
    }
  }
}
=> matches with score 0.26574233

# tokens in any ordering
POST my_index/_search
{
  "query": {
    "match": {
      "text": {
        "query": "abd ghi def"
      }
    }
  }
}
=> matches with score 0.26574233

# missing token
POST my_index/_search
{
  "query": {
    "match": {
      "text": {
        "query": "abd def"
      }
    }
  }
}
=> matches with score 0.2169777

# any tokens inserted between my desired tokens
POST my_index/_search
{
  "query": {
    "match": {
      "text": {
        "query": "abd ghi jkl def"
      }
    }
  }
}
=> matches with score 0.093538016

# tokens with errors in any number of its chars
POST my_index/_search
{
  "query": {
    "match": {
      "text": {
        "query": "azc dzf gzz",
        "fuzziness": 2
      }
    }
  }
}
=> matches with score 0.25571066