使用edge ngram
将每个单词都进行进一步的分词和切分,用切分后的ngram
来实现前缀搜索,比如’OD5046240000014238’这样一个订单号会被分解成’O’,’OD’,’OD’,’OD5’,’OD50’…‘OD5046240000014238’这样子,就可以实现前缀搜索或者搜索推荐.
不过我的业务系统中订单号OD5046240000014238
(后四位为userid的后四位)用户常常需要使用后面几位去模糊匹配订单列表,需要的分词效果如下.
1 |
|
自定义分析器
- 创建索引指定分析器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25curl -XPUT -H "Content-Type:application/json" 'http://localhost:9200/myindex' -d '{ "settings": { "analysis": { "filter": { "order_no_edge_ngram_filter" : { "type" : "edge_ngram", "min_gram" : 4, "max_gram" : 25 } }, "analyzer": { "order_no_analyzer" : { "type" : "custom", "tokenizer" : "standard", "filter" : [ "reverse", "order_no_edge_ngram_filter", "reverse" ] } } } } } '
- 测试分词器
1 |
|
返回结果
1 |
|