使用自定义ElasticSearch Analyzer

时间:2017-06-21 14:06:52

标签: elasticsearch nest

我对弹性搜索分析器有疑问。 我创建了一个这样的自定义分析器:

Analyzers(o => o.Custom("custom", 
                        m => m.CharFilters("icu_normalizer").Filters("lowercase", "asciifolding").Tokenizer("icu_tokenizer")

并尝试了分析仪,得到以下标记(好):

/_analyze?analyzer=custom&text=SödertorG

{
    "tokens": [
        {
            "token": "sodertorg",
            "start_offset": 0,
            "end_offset": 9,
            "type": "<ALPHANUM>",
            "position": 0
        }
    ]
}

但是当我尝试搜索此令牌时,就像这样:

_search?q=sodertorg&analyzer=custom

我没有得到任何结果(糟糕)。

{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
    },
    "hits": {
        "total": 0,
        "max_score": null,
        "hits": []
    }
}

我错过了什么吗? 感谢。

1 个答案:

答案 0 :(得分:0)

在您执行query_string查询时,您将定位_all字段。查询字符串中指定的analyzer仅适用于分析查询的方式; _all分析器。

要解决此问题,您需要确保将自定义standard应用于映射中的analyzer字段,例如

_all

在映射中以这种方式应用分析器,你应该得到预期的结果;您不再需要在查询中指定分析器,因为映射中的分析器将用于索引时间和查询时间分析。