求教这种情况下, 如何选择合适的analyzer

Elasticsearch | 作者 EricTowns | 发布于2019年10月08日 | 阅读数:119

我的ES文档中有一个字段是标签名称, 各个标签之间用空格隔开, 类似下面Json中的tagName这样: 


{
  "_index": "test-xxgl-01",
  "_type": "zyl-test.type",
  "_id": "71",
  "_version": 1,
  "_score": 0,
  "_source": {
    "title": " 测试标签ES_02",
    "summary": " 测试标签ES_02 测试标签ES_02",
    "tagName": "vue.js redis 事务 mybatis kafka rocketmq",
    "content": "测试标签ES_02测试标签ES_02测试标签ES_02测试标签ES_02"
  }
}


我想要实现每个标签都能进行查询, 比如 我输入myba , 可以搜索到mybatis, 那么这个字段需要使用什么样的analyzer
 
这种自定义的analyzer可行么?

"analysis": {
"filter": {
"edge_ngram": {
"type": "edge_ngram",
"min_gram": 1,
"max_gram": 10
}
},
"analyzer": {
"ngram": {
"type": "custom",
"tokenizer": "whitespace",
"filter": ["edge_ngram", "lowercase"]
}
}
}
 
望各位大神指点
已邀请:

trycatchfinal

赞同来自: EricTowns core_wzw

tagName 的内容不要使用空格分开,使用数组来存储,并且type为“keyword”
可以使用wildcard或者prefix查询"myba"

core_wzw

赞同来自: EricTowns

你自己的那种方法也可以,只是召回的候选集会多一些,但优势在于就是速度快。
数组+keyword+wildcard/prefix很漂亮,但速度会很慢,看业务数据量和查询耗时要求了。

要回复问题请先登录注册