【发布时间】:2018-12-06 05:58:10
【问题描述】:
我对搜索问题并不精通。 我只真正使用过类似查询和 in 等的 sql。
我需要创建一个搜索来过滤文件和产品。所以给定文件名: company_launch 2019.png
如果您按照预期开始搜索以下任何内容,则会返回该文件:
- com
- 2019
- 启动
- 兰奇
- _launch
- .png
等
这是一个 laravel php 网站。我看过https://github.com/teamtnt/tntsearch 但是我无法让它比确切的单词/减去几个字符的单词更好地匹配。还有更多的边缘情况意味着上述预期行为不起作用。
我现在正在查看elastic search。我对 ngrams 的概念以及它与搜索单词的一部分有什么关系有一个基本的了解,但是我不确定这个 + 模糊匹配是否足以实现这个搜索。到目前为止,我只能像以前一样获得完全匹配。
谁能帮我指出正确的方向以实现您所期望的搜索?
【问题讨论】:
-
你试过 Algolia 吗? algolia.com
-
感谢 Anan,但这与我遇到的问题相同。即有一个标题为“Aliquid commodi provident itaque quis velit”的记录。但是使用“液体”搜索此内容不会返回任何内容
-
使用 ES 你可以实现这一点,使用你的标记器和字段映射设置。首先看看NGram tokenizer 的工作原理,然后尝试使用Multiple fields 创建一个具有不同分析器/标记器配置的字段,这将帮助您找到解决问题的最佳方法。
-
嗨@jordivador 谢谢,我已经开始设置了。我不确定如何让 ngrams 正常工作。例如 event jack, event jon, event_jack 如果您使用 event jack 搜索它,我希望它以 event jack, event_jack, event_jon 的顺序显示
标签: laravel elasticsearch search fuzzy-search n-gram