2013-07-19 133 views
0

我有一個需求,我需要索引一些前綴爲(std)的文本,然後我應該可以再次搜索。通過ElasticSearch搜索括號

即,文檔(HTML)包含以下句子

(STD)Almindelige betingelser爲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" 
     } 
    } 
}} 
+0

我建議有一個看看[分析API(http://www.elasticsearch.org/guide/reference/api/admin-indices-analyze /),稍微玩一下,看看你是如何分析你的文本和你索引什麼標記。我相信你會更多地瞭解你的數據發生了什麼,以及最好做什麼。 – javanna

回答

0

的問題是在映射。 您應該將"index_analyzer": "content"更改爲"analyzer":"your_analyzer_name"

雖然您的映射給我帶​​來麻煩,但使用相同的索引設置,映射工作正常。

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

順便說一下我使用ES 0.90.2

+0

內容是我的自定義分析器,它使用html_strip和括號作爲CharFilters,空白作爲Tokenizer和小寫字母和雪球作爲Filter。括號是我的自定義CharFilter應該改變(和)_。 –

+0

嘗試更改代碼的左側。 'index_analyzer'到'analyzer' – shyos