ngrams ins elasticsearch不起作用

时间:2016-04-19 12:02:09

标签: elasticsearch mapping

我使用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"
        }
    }
}

我这里有两个对象

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

并使用此查询

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

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

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

1 个答案:

答案 0 :(得分:0)

如果指定

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

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