2017-04-05 59 views
1

我想执行精确匹配和部分匹配。例如“Alize”,所以如果我输入“Ali”,它也应该返回“Alize”的结果。对于这种情况,我只能返回结果,如果我键入确切的单词“Alize”。如何执行部分匹配elasticsearch

POST /ecommerce/_search 
'{ 
    "query": { 
     "multi_match": { 
     "fields": [ 
      "name" 
     ], 
     "operator": "AND", 
     "query": "Ali*" 
     } 
    }, 
    "size": 20, 
    "stored_fields": [ 
     "uid", 
     "_source" 
    ] 
}` 
+0

阅读:http://stackoverflow.com/questions/6467067/how -to-search-for-a-part-of-a-word-with-elasticsearch –

+0

所以我必须使用ngram? – kavi

+0

你可以。这样做会更快,特别是如果你有一个大的索引。 –

回答

4

您可以使用查询字符串查询如下

"query": { 
    "query_string": { 
     "query": "Ali*", 
     "fields": ["name"] 
    } 
} 

或者使用通配符

"query": { 
    "filtered": { 
      "filter": { 
      "bool": { 
       "must": [ 
       {"query": {"wildcard": {"name": {"value": "Ali*"}}}}, 
       ] 
      } 
     } 
    } 
} 

Wildcard document