我的理解是,自动完成/搜索文本/项目在任何可扩展产品(例如Amazon eCommerce / Google)中都可以在高水平上进行的工作是:-
基于elasticsearch(ES)的方法
文档存储在DB中。一旦持久化给elasticsearch,它就会创建索引并将索引/文档(基于令牌生成器)存储在基于内存或磁盘的配置中。
用户键入3个字符后,它将搜索ES下的所有索引(可以配置为甚至对ngram进行索引),根据权重对它们进行排名并返回给用户
但是在阅读了谷歌的一些资源后,例如基于特里的搜索
看起来有些可伸缩产品还使用Trie
数据结构来进行基于前缀的搜索。
我的问题是,基于特里的方法是否可以很好地替代ES或ES在内部使用,Trie
还是我在这里完全错过了?
ES自动补全可以通过两种方式实现:
prefix
查询第一种选择是穷人的修养功能。我提到它是因为它在某些情况下很有用,但是如果您有大量文档,则应避免使用它。
第二个选项使用常规的ES索引功能,即它将标记文本,所有(edge-)ngram都将被索引,然后您可以搜索已被索引的任何前缀/中缀/后缀。
第三个选项使用不同的方法,并针对速度进行了优化。基本上,在索引类型的字段时completion
,ES将创建一个“有限状态转换器”并将其存储在内存中以实现超快速访问。
就实现而言,有限状态传感器接近特里。您可以查看这篇出色的文章,该文章显示了特里与有限状态传感器的比较
更新(2019年6月25日):
ES
7.2引入了一种称为的新数据类型search_as_you_type
,该数据类型本身就允许这种行为。有关更多信息,请访问:https :
//www.elastic.co/guide/en/elasticsearch/reference/7.2/search-as-you-
type.html
问题内容: 我正在对具有字符串类型数组的文档字段进行自动完成建议。我的文件如下所示; 我正在 标签 字段上执行自动完成搜索。我的查询就像; 当用户键入“ word”时,我要显示“ wordland”和“ wordpress”。但是,我无法做到这一点。 您能帮上忙吗? 谢谢 问题答案: 您是否尝试过完成建议?解决问题的一种方法如下: 1)创建索引: 2)使用完成建议者类型创建映射: 3)添加文件:
在最近的一次电话采访中,我被问到这个问题--给出一本词典,上面有一个词和一个词的权重(频率越高越好),就像这样-- 设计一个API方法,给定一个前缀和一个数字k,返回匹配前缀的前k个单词。单词应该根据它们的权重进行排序,越高越好。 所以,prefix=“am”,k=5,以特定的顺序返回amazon、amazing、am、amock、amuck。 前缀查找的性能至关重要,只要前缀查找速度快,您可以进
本文向大家介绍自动完成的搜索框javascript实现,包括了自动完成的搜索框javascript实现的使用技巧和注意事项,需要的朋友参考一下 在很多需要搜索的网站, 都会有一个自动完成的搜索框. 方便用户查找他们想要的搜索词. 帮助用户快速找到自己想要的结果. 这种方式是比较友好的. 所以是比较提倡使用的. 我们这次就来实现这一效果. 我们通过两篇文章来进行讲解. 首先我们来完成界面的设计布局.
如果我在浏览器中直接对elasticsearch进行搜索,例如: http://localhost:9200/mydocs/_search?q=awesome%20搜索 搜索体数据实际上是什么样子的?它是否执行并包含所有字段?我尝试过编写一个包含所有字段的,但在浏览器中正确操作会得到不同的结果。
我有搜索输入以及下拉存储为li元素。如何向搜索标签添加自动完成功能,从li标签获取数据,并在搜索输入中显示相应的结果。 自动完成程序应从ul li标签中提取内容并执行操作。可以通过li搜索输入标签完成吗?
我有一个弹性搜索索引与以下文档,我希望有一个自动完成功能在指定的字段: 制图:https://gist.github.com/anonymous/0609B1D110D91DCEB9A90FAA76D1D5D4 1)暗示者自动完成: https://www.elastic.co/guide/en/elasticsearch/reference/1.7/search-suggesters-compl