標題的樣本資料
actiontype test
booleanTest
test-demo
test_demo
Test new account object
sync accounts data test
標題的默認映射
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
嘗試使用此查詢搜索
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "test"
}
}
]
}
},
}
這是我的期望
使用特定的單詞(例如: test )它應該回傳以下標題
expect
actiontype test
booleanTest
test-demo
test_demo
Test new account object
sync accounts data test
但
got
actiontype test
test-demo
test_demo
Test new account object
sync accounts data test
對于完全匹配(例如:同步帳戶資料測驗),它應該只回傳 this( sync accounts data test
),但會得到所有包含這個詞 ( sync,account,data,test
) 的記錄。
我應該怎么做才能做到這一點?謝謝。
uj5u.com熱心網友回復:
我不確定您使用的是哪個 ES 版本,但以下內容應該會給您一個想法。
- 使用您的映射,您可以使用 獲取所有標題文本
test
,包括booleanTest
使用query string
查詢型別。例如。
GET {index-name}/{mapping}/_search
{
"query": {
"query_string": {
"default_field": "title",
"query": "*test*"
}
}
}
但是,要使其正常作業,請確保為您的title
欄位提供帶有lowercase
分析器過濾器的分析器(請參見下面的設定示例)。您當前的映射將不起作用,因為它只是text
按原樣純凈......test /= TEST
默認情況下。
- 如果您有興趣了解 ES 的作業原理,還有其他方法……例如。您還可以
booleanTest
通過match
將自定義寫入nGram
filter
索引設定來匹配查詢。就像是,
{
"index": {
"settings": {
"index": {
"analysis": {
"filter": {
"nGram": {
"type": "nGram",
"min_gram": "2",
"max_gram": "20"
}
},
"ngram_analyzer": {
"filter": [
"lowercase",
"nGram"
],
"type": "custom",
"tokenizer": "standard"
}
}
}
}
}
}
注意:ngram_analyzer
只是一個名字。你可以隨便叫它。
min_gram
& max_gram
:選擇適合您的號碼。
在此處了解有關 n-gram 過濾器的更多資訊,好與壞:N-GRAM
然后您可以將分析器添加到您的欄位映射中,例如,
{
"title": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256,
"analyzer": "ngram_analyzer"
}
}
}
}
最后,對于完全匹配,這些適用于 type keyword
。因此,根據您的映射,您已經擁有關鍵字欄位,因此您可以使用term
查詢通過在title.keyword
欄位上搜索來獲得完全匹配;
GET {index-name}/{mapping}/_search
{
"query": {
"term": {
"title.keyword": {
"value": "sync accounts data test"
}
}
}
}
此外,您將希望閱讀/了解有關這些解決方案的更多資訊,并根據您的索引設定和需求決定最佳解決方案。此外,可能還有更多方法可以實作您的需求,這應該是一個好的開始。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/508510.html
標籤:javascript 节点.js 弹性搜索