通过ElasticSearch搜索括号

时间:2013-07-19 14:38:31

标签: elasticsearch

我有一个要求,我需要索引一些带有(std)前缀的文本,然后我可以再次搜索。

IE中。文档(html)包含以下句子

  

(std)Almindelige betingelser for misligholdelseserstatning

我应该可以查询

  

(std)Almindelige betingelser

现在,我已经在文档中阅读了很多内容,并且现在有了一个替换(和)_的charfilter,我认为我在搜索查询中也可以安全地替换,所以它变成

  

_std_Almindelige betingelser

但由于某种原因,它根本无法全部工作。搜索_std_Almindelige betingelser时根本没有返回任何结果,即使我可以通过浏览文档并返回一个方面列表来查看该术语。

这是我的索引设置和类型映射

var settings = new IndexSettings();

settings.Analysis.CharFilters.Add("parenthesis", new MappingCharFilter
{
    Mappings = new[] { "( => _", ") => _" }
});

settings.Analysis.TokenFilters.Add("snowball", new SnowballTokenFilter
{
    Language = "Danish"
});

settings.Analysis.Analyzers.Add("content", new CustomAnalyzer
{
    CharFilter = new List<string>() { "html_strip", "parenthesis" },
    Tokenizer = "whitespace",
    Filter = new List<string>() { "lowercase", "snowball" }
});

和映射

{"searchservicepages":{
    "_source":{
        "excludes" : ["content"]
    },
    "properties":{
        "content":{
            "type":"string",
            "index_analyzer"":"content"
        }
    }
}}

1 个答案:

答案 0 :(得分:0)

问题在于映射。 您应该将"index_analyzer": "content"更改为"analyzer":"your_analyzer_name"

虽然您的映射给我带​​来了麻烦,但映射后的索引设置相同。

  "testindex": {
        "testdoc": {
          "_source": {
            "excludes": [
              "content"
            ]
          },
          "properties": {
            "content": {
              "type": "string",
              "analyzer": "myAnalyzer"
            }
          }
        }

顺便说一下,我正在使用ES 0.90.2