我有這樣的查詢(我已經移除的分揀部分,因爲它並不重要)一起multi_match:Elasticsearch - 短查詢
GET _search
{
"query": {
"multi_match": {
"query": "somethi",
"fields": [ "title", "content"],
"fuzziness" : "AUTO",
"prefix_length" : 0
}
}
}
運行此我得到的結果是這樣的:
"hits": [
{
"_index": "test_index",
"_type": "article",
"_id": "2",
"_score": 0.083934024,
"_source": {
"title": "Matching something abc",
"content": "This is a piece of content",
"categories": [
{
"name": "B",
"weight": 4
}
]
},
"sort": [
4,
0.083934024,
"article#2"
]
},
{
"_index": "test_index",
"_type": "article",
"_id": "3",
"_score": 0.18436861,
"_source": {
"title": "Matching something abc",
"content": "This is a piece of content containing something",
"categories": [
{
"name": "C",
"weight": 3
}
]
},
"sort": [
3,
0.18436861,
"article#3"
]
},
...
所以沒有問題得到什麼預期。但是我注意到,我從查詢中刪除一個字母代替someth
,Elasticsearch不會返回任何結果。
這對我來說很奇怪。看來multi_match
正在做部分匹配,但它以某種方式需要使用最少的x個字符。相同,如果我試圖把查詢例如omethin
我會得到的結果,但只使用omethi
我不會得到任何。
是否有任何設置來設置查詢中的最少字符數或者我可能需要重寫我的查詢來實現我想要的?我想在多個字段(在標題和內容字段的上面的查詢中)上運行匹配,這將允許部分匹配和模糊。
謝謝。我今天和NGRAM的分析師一起玩,看起來它是做這個工作的。我與fuzinness一起使用沒有更大的問題 –