0

我有一个要求,我需要索引一些以 (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"
        }
    }
}}
4

1 回答 1

1

问题在于映射。你应该"index_analyzer": "content"变成"analyzer":"your_analyzer_name"

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

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

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

于 2013-07-25T09:34:13.800 回答