查看使用 Elasticsearch 实现预输入搜索的四种不同方法,以获得更好的最终用户体验。花椒壳-愿您平安健康
如今,搜索是企业应用程序中的一项重要功能,最终用户沉迷于 Google 搜索的体验,并期望应用程序搜索也能提供类似的体验。花椒壳-愿您平安健康
这要求我们设计和实现一个搜索引擎以及您的黄金源 (RDBMS/NOSQL)。目前市场上有很多搜索引擎,如 Elasticsearch、Apache Solr、Azure Cognitive Search 等。 它们提供了更好的搜索体验和功能,如预先输入、模糊搜索、基于相关性的搜索结果提升、相似性搜索等。花椒壳-愿您平安健康
什么是预输入搜索?
预先输入搜索,也称为自动建议或自动完成功能,是一种通过检查用户输入数据是否是数据子集来过滤数据的方法。如果是这样,则所有与用户部分匹配的文本都是在键入文本时提供提示的一种方式。此功能无疑有助于最终用户在搜索时的体验。
如何使用 Elasticsearch 实现预先输入搜索
Elasticsearch 提供了四种不同的方式来实现预先输入搜索。让我们来看看所有这四种方法,看看哪种方法是最佳的并且有更好的实现:
- 匹配短语前缀
- 边 Ngram
- 完成建议
- 输入时搜索
匹配短语前缀查询
在这种方法中,我们需要对搜索字段使用前缀查询。该查询以与提供的相同顺序返回包含提供的前缀文本的单词的文档。
例如:
JSONGET /_search
{
"query": {
"match_phrase_prefix": {
"message": {
"query": "quick brown f"
}
}
}
}
上面的搜索返回文档quick brown fox或two quick brown ferrets但不fox is quick and brown因为查询将匹配以quick brown f-开头的短语
边 Ngram
使用这种方法,我们需要使用 edge-n-gram 过滤器配置自定义分析器。
JSONPUT myIndex
{
"settings": {
"analysis": {
"analyzer": {
"autocomplete": {
"tokenizer": "autocomplete",
"filter": [
"lowercase"
]
},
"autocomplete_search": {
"tokenizer": "lowercase"
}
},
"tokenizer": {
"autocomplete": {
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 5,
"token_chars": [
"letter"
]
}
}
}
},
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "autocomplete",
"search_analyzer": "autocomplete_search"
}
}
}
}
实施此方法时需要考虑的几点:
- 最好对索引和搜索使用相同的分析器
- 由于标记器将文本分解为自定义字符上的单词,因此可能会增加索引时间
- 和上面说的一样,会增加索引存储
完成建议
Elasticsearch 提供了一个 Completion Suggester 作为自动完成/搜索即输入功能的本机解决方案。自动完成功能应该与用户输入一样快,以提供与用户已经输入的内容相关的即时反馈。因此,完成建议器使用支持快速查找但构建成本高且存储在内存中的数据结构。
如何设置完成建议器?
要使用 Completion Suggester,我们需要对该字段进行特殊映射:
JSONPUT movie
{
"mappings": {
"_doc" : {
"properties" : {
"suggest" : {
"type" : "completion"
},
"title" : {
"type": "keyword"
}
}
}
}
}
索引数据:
JSONPUT movie/_doc/1?refresh
{
"suggest" : [ "Elevate Me Later", "Covert affairs" ]
}
询问:
JSONPOST movie/_search?pretty
{
"suggest": {
"movie-suggest" : {
"prefix" : "ele",
"completion" : {
"field" : "suggest",
"skip_duplicates": true
}
}
}
}
输入时搜索
Search-as-you-type 是经过优化的字段类型,为预先输入搜索或 as-you-type 完成用例提供开箱即用的支持。Search-as-you-type 映射创建许多子字段并通过分析术语来索引数据,这有助于部分匹配索引文本值。它支持前缀补全和中缀补全。
要配置 search-as-you-type,请为您的索引字段添加以下映射:
JSONPUT search-index
{
"mappings": {
"properties": {
"title": {
"type": "search_as_you_type"
}
}
}
}
您可以查看按您键入的搜索或完成建议程序,以使用 Elasticsearch 实现预输入功能。尽管使用匹配短语前缀或 edge-n-gram,我们也可以实现相同的效果,即按类型搜索在内部包装此实现,并作为字段类型提供高效和优化的功能。
花椒壳-愿您平安健康 花椒壳资源网,资源下载,主要提供个人搜集资源、设计素材、音乐、视频、图片等一切与互联网有关的资源https://www.xinliu.vip/