【问题标题】:ngrams ins elasticsearch are not workingngram ins elasticsearch不工作
【发布时间】:2016-08-11 14:17:45
【问题描述】:

我使用 elasticsearch ngram

"analysis": {
    "filter": {
        "desc_ngram": {
            "type": "ngram",
            "min_gram": 3,
            "max_gram": 8
        }
    },
    "analyzer": {
        "index_ngram": {
            "type": "custom",
            "tokenizer": "keyword",
            "filter": [ "desc_ngram", "lowercase" ]
        },
        "search_ngram": {
            "type": "custom",
            "tokenizer": "keyword",
            "filter": "lowercase"
        }
    }
}

我这里有 2 个对象

{
    "name": "Shana Calandra",
    "username": "shacalandra",
},
{
    "name": "Shana Launer",
    "username": "shalauner",
},

并使用此查询

{
    query: {
        match: {
            _all: "Shana"
        }
    }
}

当我使用此查询进行搜索时,它会返回两个文档,但我无法在这里按部分单词搜索,例如,我不能在查询中使用“Shan”而不是“Shana”,因为它不返回任何内容。

也许我的映射是错误的,我无法理解问题是在映射上还是在查询上

【问题讨论】:

  • 问题可能是您正在搜索 _all 字段,除非另有说明,否则该字段使用标准分析器。尝试专门匹配name。有用吗?

标签: elasticsearch mapping


【解决方案1】:

如果你指定

  "mappings": {
    "test": {
      "_all": {
        "index_analyzer": "index_ngram",
        "search_analyzer": "search_ngram"
      },

对于_all 字段的映射,它将起作用。 _all 有自己的分析器,我怀疑你只是将分析器用于 nameusername 而不是 _all

【讨论】:

  • 不要返回姓名或用户名
  • 我不明白你的意思。
猜你喜欢
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
  • 1970-01-01
  • 2016-04-09
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
  • 2018-03-05
相关资源
最近更新 更多