我創建了一個電子郵件彈性搜索資料庫,使用以下電子郵件發件人和收件人映射:
"mappings": {
...
"recipients": {
"type": "keyword"
},
"sender": {
"type": "keyword"
},
...
我得到了一個電子郵件串列,如果任何電子郵件是發件人或收件人,我會嘗試查詢這些電子郵件。例如,我嘗試使用以下查詢:
{
"query": {
"multi_match" : {
"query": "[email protected] [email protected]",
"operator": "OR",
"fields": [ "recipients", "sender" ],
"type": "cross_fields"
}
}
}
如果(發件人或收件人中存在[email protected])或(發件人或收件人中存在[email protected]),則查詢電子郵件。但它不回傳任何結果..(但它確實存在)
如果發件人或收件人中有任何電子郵件,有誰知道如何查詢電子郵件?謝謝
uj5u.com熱心網友回復:
很高興您找到了解決方案,但要了解為什么multi_match不起作用以及為什么query_string起作用,以及為什么應該盡可能避免query_string重要的事情。
如前所述,在
此外,您的multi_match查詢不起作用,因為您two mails在同一查詢中提供了輸入,[email protected] [email protected]并且該術語的分析取決于欄位分析器(您的示例中的關鍵字),因此,它會嘗試[email protected] [email protected]在您的欄位中查找,而不是[email protected]or [email protected]。
如果你想使用 multi_match,正確的查詢是
{
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "[email protected]",
"operator": "OR",
"fields": [
"recipients",
"sender"
],
"type": "cross_fields"
}
},
{
"multi_match": {
"query": "[email protected]",
"operator": "OR",
"fields": [
"recipients",
"sender"
],
"type": "cross_fields"
}
}
]
}
}
}
它回傳以下檔案。
"hits": [
{
"_index": "71367024",
"_id": "1",
"_score": 0.6931471,
"_source": {
"recipients": "[email protected]",
"sender": "[email protected]"
}
},
{
"_index": "71367024",
"_id": "2",
"_score": 0.6931471,
"_source": {
"recipients": "[email protected]",
"sender": "[email protected]"
}
}
]
uj5u.com熱心網友回復:
我想我可能會找到答案。使用以下查詢將起作用:
{
"query": {
"query_string" : {
"query": "[email protected] OR [email protected]",
"fields": [ "recipients", "sender" ]
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/438374.html
標籤:弹性搜索
