elasticsearch|elasticsearch 7.0 新特性之 search as you type
相信大家都知道 搜索引擎除了能够返回你想要的内容外,还有另外一个重要的功能,就是搜索框的字段补全,当用户在输入框输入一段文本的前几个词时,下面会出现很多相关的候选词提示,那么在es7.0中这个场景很容易就通过 search_as_you_type 来实现1、介绍 search_as_you_type filed是elasticsearch 7.0 新增的数据类型,它为用户提供了一种开箱即用的搜索即可见的解决方案,内部会自动拆分为多个子字段索引以支持高效查询,目前 search_as_you_type 实现前缀,中缀查询。
2、操作
- mapping
PUT my_index
{
"mappings": {
"properties": {
"my_field": {
"type": "search_as_you_type"
}
}
}
}
上述操作会自动创建如下几个field:
字段 | 分词器 |
---|---|
my_field | 使用mapping时指定的分词器,没指定将使用默认分词器 |
my_field._2gram | 使用2元gram进行分词 |
my_field._3gram | 使用3元gram进行分词 |
my_field._index_prefix | 使用edge gram进行分词操作,相当于1元gram(类似sql中的 like ‘abc%’) |
【elasticsearch|elasticsearch 7.0 新特性之 search as you type】增大 max_shingle_size 会带来更多的索引存储,检索性能也会受到影响,一般情况下默认值就够用了。
索引到root field的文本也会被索引到其它的子字段里:
PUT my_index/_doc/1?refresh
{
"my_field": "quick brown fox jump lazy dog"
}
实现 search_as_you_type 最高效的查询时使用类型为bool_prefix的multi_match query,下面是一个例子:
GET my_index/_search
{
"query": {
"multi_match": {
"query": "brown f",
"type": "bool_prefix",
"fields": [
"my_field",
"my_field._2gram",
"my_field._3gram"
]
}
}
}{
"took" : 44,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.8630463,
"hits" : [
{
"_index" : "my_index",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.8630463,
"_source" : {
"my_field" : "quick brown fox jump lazy dog"
}
}
]
}
}
虽然 match_phrase_prefix 也可以实现上述需求,但考虑到性能问题建议不要这么做。
- 参数
如果没做特别说明,search_as_you_type 类型的mapping参数与普通 text 类型的mapping参数是一致的:
参数 | 说明 |
---|---|
analyzer | 指定索引期间和搜索期间的分词器(索引期间的分词器能使用 search_analyzer参数覆盖),默认的分词器是 standard |
index | 是否进行索引 true 或 false ,设置为false将不能被检索 |
index_options | 文本索引的粒度,支持 docs、freqs、positions、offsets |
norms | true 或 false;存储该字段归一化因子,如果字段不需要参与评分,可设置为false |
store | 是否独立存储field数据 |
search_analyzer | 查询时分词器 |
search_quote_analyzer | 默认使用 search_analyzer |
similarity | 指定相似度算法,默认是BM25 |
term_vector | 是否存储term向量,默认是no |
推荐阅读
- Android7.0|Android7.0 第三方应用无法访问私有库
- 2018.07.07《刺杀骑士团长》村上春树
- ElasticSearch6.6.0强大的JAVA|ElasticSearch6.6.0强大的JAVA API详解
- Elasticsearch|Elasticsearch 简介
- 金斧头银斧头
- elasticsearch分析器
- 三十一、|三十一、 Elasticsearch集群搭建部署及配置
- 2018.07.06|2018.07.06 感恩随笔
- springmvc|springmvc 集成 Spring Data Elasticsearch 遇到的坑
- 2019.07.03