elasticsearch - ES搜索部分词-ngram?

标签 elasticsearch n-gram

我正在使用Elastic Search索引包含两个字段的实体:agencyName和agencyAddress。

假设我已经索引了一个实体:

{
    "agencyName": "Turismo Viajes",
    "agencyAddress": "Av. Maipú 500"
}

我希望能够搜索该实体,并在上面通过agencyName搜索该实体。不同的搜索可能是:

1)乌里斯莫
2)维亚耶
3)维亚耶斯
4)旅游
5)乌里斯

这个想法是,如果我用那些字符串查询,我应该总是得到那个实体(可能有不同的分数,这取决于它的准确性)。

为此,我认为nGram可以解决问题,因此我在我的 flex search.yml文件中定义了一个全局分析器,称为“短语”。
index:
  analysis:
    analyzer:
      phrase:
        type: custom
        tokenizer: nGram
        filter: [nGram, lowercase, asciifolding]

我这样创建了代理商索引:
{
  "possible_clients" : {
    "possible_client" : {
      "properties" : {
        "agencyName" : {
          "type" : "string",
          "analyzer" : "phrase"
        },
        "agencyAddress" : {
          "type": "string"
        }
}

问题是当进行这样的 call 时:
curl -XPOST 'http://localhost:9200/possible_clients/possible_client/_search' -d '{
    "query": { "term": { "agencyName": "uris" }}
}'

我没有任何点击。有什么想法我做错了吗?

提前致谢。

最佳答案

您正在使用术语查询进行搜索。字词查询始终不会被分析。因此,更换分析仪不会有任何影响。您应该使用例如匹配查询。

关于elasticsearch - ES搜索部分词-ngram?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19038967/

相关文章:

elasticsearch - 优化API以减少分割并消除ES删除的文档不起作用

Solr Shingle 在调试查询中不可见

r - NGramTokenizer 未按预期工作

elasticsearch - 如何在Elasticsearch中仅向前创建ngram?

python - 根据第一个元素用字典的最频繁元组制作一个列表

watch - 如何创建一个可以识别elasticsearch给定索引中数据变化的弹性 watch

elasticsearch - Nest MultiMatch 字段提升

elasticsearch - 麋鹿。找不到嵌套值

elasticsearch - 如何计算字段在特定范围内的文档数?

elasticsearch - 带有 Word nGrams 的多词术语向量?