我正在嘗試撰寫一個 elasticsearch (v7.17) 查詢,該查詢回傳所有檔案,其中我的搜索詞中的所有標記在一個或任意數量的欄位中以任何順序匹配。
我可以對每個欄位執行此操作,使用multi_match帶有 operator 的查詢and,但我想對任意數量的欄位執行此操作,例如,如果有 3 個欄位:text1,text2并且number1它們被填充為兩個檔案:
text1:'汽車',text2:'奧迪',number1:'A6'
text1: '汽車奧迪', text2: '' number1: 'Q7',
我想在搜索“Car Audi”時找到所有兩個,但在搜索“Car Audi A6”時只找到第一個,而在搜索“Car Audi A8”時則沒有。
如果不將它們全部寫入同一個欄位(我既不想也不能因為它們在映射中部分具有不同的分析器),我如何才能做到這一點?
重要的是要注意映射有點復雜,并且欄位具有不同的分析器,因此欄位中的搜索標記“Audi”text也將匹配“Audi-123”,例如在欄位 number1 中并非如此。
在此先感謝您的幫助。
uj5u.com熱心網友回復:
您只能使用multi_match查詢來實作相同的目標。在這里,您需要設定operatorvalue asand和typevalue as cross_fields。請參閱此檔案。
詢問:
POST test/_search
{
"query": {
"multi_match": {
"query": "Car Audi A6",
"fields": [
"text1",
"text2",
"number1"
],
"type": "cross_fields",
"operator": "and"
}
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/467167.html
