2013-04-10 225 views
34

我在看 http://euphonious-intuition.com/2012/08/more-complicated-mapping-in-elasticsearch/ 它解釋ElasticSearch分析器。彈性搜索search_analyzer與index_analyzer

我不明白關於擁有不同的搜索和索引分析器的部分。 自定義映射的第二個例子是這樣的:
- >指數分析儀是一種edgeNgram
- >搜索分析儀:

"full_name":{ 
    "filter":[ 
     "standard", 
     "lowercase", 
     "asciifolding" 
    ], 
    "type":"custom", 
    "tokenizer":"standard" 
} 

如果我們想查詢「種族」有來無回類似的結果* ra * pport和* rac * ial由於edgeNgram,爲什麼使用edgeNgram首先將其索引?

請用不同的分析儀有用的例子來解釋。

+1

我可否知道我的回答是否讓你的事情更清楚? – javanna 2013-04-11 19:56:02

+0

頂部的鏈接被破壞 – Artem 2015-06-01 05:29:41

回答

73

通常在索引時間和查詢時間都有類似的分析鏈。類似的意思並不完全相同,但通常您將文檔編入索引的方式反映了您查詢它們的方式。

ngrams示例非常適合,因爲它是您在索引和查詢時使用不同分析器的主要原因之一。

部分匹配您索引與邊緣n元語法,從而使 「elasticsearch」 變爲(與mingram 3和maxgram 20):

「ELA」, 「ELAS」, 「ELAST」, 「elasti」,「彈性「,」鬆緊帶「,」鬆緊帶「,」鬆緊帶「,」鬆緊帶「,」eleasticsearc「和」elasticsearch「

現在讓我們查詢創建的字段。如果我們查詢「彈性」這個詞,就會找到一個匹配結果,我們可以得到預期的結果。根據我們編制的索引,我們基本上已經成爲我們稱之爲部分匹配完全匹配的東西。沒有必要將ngram應用於查詢。如果我們這樣做,我們將查詢以下條款:

「ELA」,「ELAS」,「ELAST」,「elasti」和「彈性」

這將使查詢方式更加複雜,會導致以獲得奇怪的結果。假設您在另一個文檔中的同一字段中指定了「elapsed」一詞。您將有以下的n-gram:

「ELA」,「ELAP」,「elaps」,「流逝」,「流逝」

如果你搜索「彈性」,使n元語法的查詢,術語「ELA」將這個第二個文件太匹配,因此你要做的頭文件找回來一起,即使沒有條款包含你要找的整個「彈性」一詞。

我建議你去看看在analyze api與不同分析和他們不同的結果繞繞玩。

+1

謝謝,答案確實讓事情更清楚:) – 2013-06-04 08:14:07

+1

[This](https://github.com/polyfractal/elasticsearch-inquisitor)elasticsearch插件幫助瞭解各種分析器的工作原理。 – gsk 2015-01-07 13:37:50

+0

@gsk非常感謝很多人提及上面的插件,這對我的數據在elasticsearch中的索引方式非常有幫助。 – 2016-08-03 14:08:46

7

要引用the official documentation about index vs search analyzers

有時,它是有道理的,在指數和 搜索時間使用不同的分析。例如,在索引時間,我們可能要指數 同義詞,例如,用於快速,我們也快速索引,快速 和快速的每次出現。但是,在搜索時,我們不需要搜索所有的 這些同義詞。相反,我們可以查找用戶輸入的單個單詞,快速,快速,快速或快速。

爲了使這種區別,Elasticsearch還支持 index_analyzer和search_analyzer參數,分析儀命名 default_index的值,並default_search。

考慮到這些額外的參數考慮進去,在指數 時間的全序列確實是這樣的:

  • 在字段映射定義的index_analyzer,否則
  • 分析儀的字段映射定義,否則
  • 在文檔的_analyzer字段中定義的分析器,否則
  • 默認index_analyzer的類型,默認爲
  • 中的默認分析儀類型,默認爲
  • 在索引設置命名default_index的值分析器,缺省
  • 默認索引設置分析器命名,缺省
  • 分析器在節點命名default_index的值級,默認爲
  • 分析儀名爲default在節點級,默認爲
  • 標準分析器

而且在搜索時:

  • 在查詢本身所限定的分析儀,否則
  • 在字段映射定義的search_analyzer,否則
  • 分析器在字段映射定義,否則
  • 的類型,缺省默認search_analyzer到
  • 默認分析器的類型,默認爲
  • 默認爲
  • 的analyz在索引設置命名default_search分析器, ER命名默認的索引設置,默認爲
  • 分析儀在節點級命名default_search,默認爲
  • 分析儀在節點級,默認爲
  • 標準分析器名爲default