目前我在elasticsearch指數的標題有一個項目:testing123
Elasticsearch - 不要求完全匹配
當我尋找它,我只能得到它回來,如果我搜索testing123
準確。但是,我希望能夠搜索testing
並讓它返回。
我該怎麼做才能使搜索必須以該詞開頭,但也不能完全匹配?
任何幫助,將不勝感激。
目前我在elasticsearch指數的標題有一個項目:testing123
Elasticsearch - 不要求完全匹配
當我尋找它,我只能得到它回來,如果我搜索testing123
準確。但是,我希望能夠搜索testing
並讓它返回。
我該怎麼做才能使搜索必須以該詞開頭,但也不能完全匹配?
任何幫助,將不勝感激。
使用Simple Analyzer在映射。
創建其中title
場使用了兩種標準(默認)和簡單分析索引的索引:
POST /demo
{
"mappings": {
"doc": {
"properties": {
"title": {
"type": "string",
"fields": {
"simple": {
"type": "string",
"analyzer": "simple"
}
}
}
}
}
}
}
指數文檔
POST /demo/doc/1
{
"title": "testing123"
}
最後,使用multi_match
查詢搜索:
POST /demo/doc/_search
{
"query": {
"multi_match": {
"fields": [
"title",
"title.simple"
],
"query": "testing"
}
}
}
此查詢返回文檔噸。如果您要將查詢字詞更改爲testing123
,則也會有匹配項。
另一種可能的解決方案是使用Prefix Query。
我相信你在尋找wildcards。
匹配具有匹配通配符表達式的字段的文檔。支持的通配符是*,它匹配任何字符序列(包括空字符)和?,它匹配任何單個字符。
通配符基本上是「匹配任何東西」。所以,你的搜索看起來像
testing*
這將匹配
測試
是testing123
testingthings
但是不匹配
test123ing
或
測試
雖然通配符確實達到了正確的結果,但我不希望用戶必須這樣做才能達到目的。有沒有建立,因爲我相信solr有這個。 – Jimmy 2015-03-19 13:05:34