[英]Partial search using wildcard in Elastic Search
我想使用通配符在彈性搜索中搜索數組值。
{
"query": {
"wildcard": {
"short_message": {
"value": "*nne*",
"boost": 1.0,
"rewrite": "constant_score"
}
}
}
}
我正在搜索“short_messages”,它對我有用。 但我想搜索“messages.message”它不起作用。
{
"query": {
"wildcard": {
"messages.message": {
"value": "*nne*",
"boost": 1.0,
"rewrite": "constant_score"
}
}
}
}
而且我還想在數組中搜索多個字段。
例如:- 字段:["messages.message","messages.subject", "messages.email_search"]
那么就有可能給我最好的解決方案。
提前致謝。
似乎您正在使用messages
的nested
數據類型。
您需要為此使用nested query
:
POST <your_index_name>/_search
{
"query": {
"nested": {
"path": "messages",
"query": {
"wildcard": {
"messages.message": {
"value": "*nne*",
"boost": 1
}
}
}
}
}
}
對於多字段查詢,您可能可以使用query_string
因此基本上您的解決方案是在nested query
使用query_string
。
POST <your_index_name>/_search
{
"query": {
"nested": {
"path": "messages",
"query": {
"query_string": {
"fields": ["messages.message", "messages.subject"],
"query": "*nne*",
"boost": 1
}
}
}
}
}
您還可以使用Query DSL
來使用wildcard
但同樣,您需要為每個字段添加多個查詢子句,出於性能原因,我懷疑通配符查詢不支持多字段查詢。
POST <your_index_name>/_search
{
"query": {
"nested": {
"path": "messages",
"query": {
"bool": {
"should": [
{
"wildcard": {
"messages.message": {
"value": "*nne*",
"boost": 1
}
}
},
{
"wildcard": {
"messages.subject": {
"value": "*nne*",
"boost": 1
}
}
}
]
}
}
}
}
}
請注意,通配符搜索是不可取的,因為它必須執行的正則表達式操作的數量會影響您獲得響應的延遲,相反,我建議您查看Ngram Tokenizer,從而您可以使用簡單的匹配查詢來得到你想要的結果。
讓我知道這是否有幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.