3 回答

TA貢獻(xiàn)1801條經(jīng)驗(yàn) 獲得超8個(gè)贊
我認(rèn)為沒有必要改變?nèi)魏斡成洹L試使用query_string,它是完美的。所有方案都適用于默認(rèn)的標(biāo)準(zhǔn)分析器:
我們有數(shù)據(jù):
{"_id" : "1","name" : "John Doeman","function" : "Janitor"}
{"_id" : "2","name" : "Jane Doewoman","function" : "Teacher"}
場(chǎng)景1:
{"query": {
"query_string" : {"default_field" : "name", "query" : "*Doe*"}
} }
響應(yīng):
{"_id" : "1","name" : "John Doeman","function" : "Janitor"}
{"_id" : "2","name" : "Jane Doewoman","function" : "Teacher"}
場(chǎng)景2:
{"query": {
"query_string" : {"default_field" : "name", "query" : "*Jan*"}
} }
響應(yīng):
{"_id" : "1","name" : "John Doeman","function" : "Janitor"}
場(chǎng)景3:
{"query": {
"query_string" : {"default_field" : "name", "query" : "*oh* *oe*"}
} }
響應(yīng):
{"_id" : "1","name" : "John Doeman","function" : "Janitor"}
{"_id" : "2","name" : "Jane Doewoman","function" : "Teacher"}

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
我也在使用nGram。我使用標(biāo)準(zhǔn)tokenizer和nGram作為過濾器。這是我的設(shè)置:
{
"index": {
"index": "my_idx",
"type": "my_type",
"analysis": {
"index_analyzer": {
"my_index_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"mynGram"
]
}
},
"search_analyzer": {
"my_search_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"standard",
"lowercase",
"mynGram"
]
}
},
"filter": {
"mynGram": {
"type": "nGram",
"min_gram": 2,
"max_gram": 50
}
}
}
}
}
讓我們找到最多50個(gè)字母的單詞部分。根據(jù)需要調(diào)整max_gram。在德語(yǔ)中,單詞可以變得非常大,所以我將其設(shè)置為高價(jià)值。

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
使用前導(dǎo)和尾隨通配符進(jìn)行搜索對(duì)于大型索引來(lái)說(shuō)會(huì)非常慢。如果您希望能夠通過單詞前綴進(jìn)行搜索,請(qǐng)刪除前導(dǎo)通配符。如果你真的需要在一個(gè)單詞的中間找到一個(gè)子字符串,那么你最好使用ngram tokenizer。
添加回答
舉報(bào)