我有我的自定義分析器,如下所示。但我不明白如何實現我的目標。使用帶有edgeNGram的word_delimiter忽略Word_Delimiter令牌
我的目標是,我想有空格分隔倒排索引,但我想在用戶輸入分鐘3個字符後有自動完成功能。對於我雖然對word_delimiter和edgeNGram令牌結合如下
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "whitespace",
"filter": [
"standard",
"lowercase",
"my_word_delimiter",
"my_edge_ngram_analyzer"
],
"type": "custom"
}
},
"filter": {
"my_word_delimiter": {
"catenate_all": true,
"type": "word_delimiter"
},
"my_edge_ngram_analyzer": {
"min_gram": 3,
"max_gram": 10,
"type": "edgeNGram"
}
}
}
}
}
}
這會給結果爲「兄弟TN-200」,如下圖。但我期待「tn」也在恢復索引,因爲我有word_delimiter令牌。爲什麼它不在倒排索引中?我怎樣才能做到這一點?
url -XGET "localhost:9200/myIndex/_analyze?analyzer=my_analyzer&pr
etty=true" -d "Brother TN-200"
{
{
"token" : "bro",
"start_offset" : 14,
"end_offset" : 21,
"type" : "word",
"position" : 2
}, {
"token" : "brot",
"start_offset" : 14,
"end_offset" : 21,
"type" : "word",
"position" : 2
}, {
"token" : "broth",
"start_offset" : 14,
"end_offset" : 21,
"type" : "word",
"position" : 2
}, {
"token" : "brothe",
"start_offset" : 14,
"end_offset" : 21,
"type" : "word",
"position" : 2
}, {
"token" : "brother",
"start_offset" : 14,
"end_offset" : 21,
"type" : "word",
"position" : 2
}, {
"token" : "tn2",
"start_offset" : 22,
"end_offset" : 28,
"type" : "word",
"position" : 3
}, {
"token" : "tn20",
"start_offset" : 22,
"end_offset" : 28,
"type" : "word",
"position" : 3
}, {
"token" : "tn200",
"start_offset" : 22,
"end_offset" : 28,
"type" : "word",
"position" : 3
}, {
"token" : "200",
"start_offset" : 25,
"end_offset" : 28,
"type" : "word",
"position" : 4
}]
}
UPDATE:
當然,如果我用「min_gram」:2,「TN」將在恢復指數,但我不想這樣,因爲如果任何其他字由「TN」內單詞,它會出現在結果列表中。
例如,關於「hp」關鍵字。我正在爲「惠普」購買產品,因爲我的產品就像「hp xxx」,但我也得到了一種名爲「tech hpc」的產品。我不希望這個產品被顯示,直到我輸入「hpc」。這就是我之所以設置3
如果我不使用edgeNGram分詞器,但只有word_delimiter,「TN」在倒排索引作爲兄弟TN-200將被索引爲兄弟,TN和200,這就是爲什麼我預計word_delimiter使「tn」處於倒排索引。如果我使用edgeNGram,它沒有用處嗎? -
是的,我知道它應該是2,但我更喜歡3,因爲我不希望如果任何其他產品包含「tn」應顯示在結果列表中。例如關於「hp」。我正在爲「惠普」購買產品,因爲我的產品就像「hp xxx」,但我也得到了一種名爲「tech hpc」的產品。我不希望這個產品被顯示,直到我輸入「hpc」。 – batmaci
另一方面,如果我不使用edgeNGram標記器,但只有word_delimiter,「tn」在倒排索引中。這就是爲什麼我期望word_delimiter使「tn」被索引。如果我使用edgeNGram,它沒有用處嗎? – batmaci
如果單詞分隔符過濾器產生2個或更少的代碼點的標記,則它們被'my-edge-ngram'忽略,就像忽略任何代號爲2或更小的代碼,如果單詞分隔符不存在。另外我不明白爲什麼當你爲產品「hp xxx」輸入「hp」時會得到「hewlett packard」。 'my_edge_ngram'應該從倒排索引中刪除「hp」,並且只有'hpc'將保留'curl -Xget「http:///_analyze?analyzer = my_analyzer&text = hp xxx」' –
keety