我在我的elasticsearch索引中有一個"name" field - not_analyzed
。Elasticsearch - 與部分搜索詞匹配not_analyzed字段
可以說價值"name" field
是"some name"
。我的問題是,如果我想匹配搜索詞 - some name some_more_name someother name
,因爲它包含some name
,那麼not_analyzed
會允許匹配發生,如果不匹配,那麼我如何才能匹配搜索詞?
我在我的elasticsearch索引中有一個"name" field - not_analyzed
。Elasticsearch - 與部分搜索詞匹配not_analyzed字段
可以說價值"name" field
是"some name"
。我的問題是,如果我想匹配搜索詞 - some name some_more_name someother name
,因爲它包含some name
,那麼not_analyzed
會允許匹配發生,如果不匹配,那麼我如何才能匹配搜索詞?
索引期間name
字段的文本存儲在倒排索引中。如果分析此字段,則將使用2個術語進入倒排索引:some
和name
。但由於未分析,因此只存儲一項:some name
在搜索過程中(使用匹配查詢),默認情況下會分析並標記化搜索查詢。所以會有幾個術語:some
,name
,some_more_name
和someother
。然後Elasticsearch將查看倒排索引以查看搜索查詢中是否至少有一個詞條。但是隻有some name
術語,所以您不會在結果集中看到此文檔。
您可以用分析儀端點
回到你的問題,如果你想獲得建議的搜索查詢的比洞賽,你的領域必須進行分析。
如果您需要保留非分析版本,以及你應該使用multi fields:
PUT my_index
{
"mappings": {
"my_type": {
"properties": {
"name": {
"type": "keyword",
"fields": {
"analyzed": {
"type": "text"
}
}
}
}
}
}
}
塔拉斯已經解釋清楚了,我問題可能已經解決,但還是如果你不能改變你的索引的映射,您可以使用查詢(我已經在5.4 ES測試)
GET test/_search
{
"query": {
"query_string": {
"default_field": "namekey",
"query": "*some* *name*",
"default_operator": "OR"
}
}
使用通配符總是會影響性能,特別是如果'一些name'實際上是'some1 some2 some3 some4名1名2 NAME3 name4',相關 - https://開頭討論.elastic.co /噸/精確匹配-IN-A-未分析場/ 37121 – vjjj