创建可用的搜索以进行过滤

时间:2018-06-27 10:59:51

标签: laravel elasticsearch search fuzzy-search n-gram

我不太了解搜索问题。 我只真正将sql与类似查询和in等一起使用。

我需要创建搜索以过滤文件和产品。所以给定文件名: company_launch 2019.png

如果您开始搜索以下任何内容,则可能会返回该文件:

  • com
  • 2019
  • 启动
  • lanch
  • _launch
  • .png

这是针对laravel php网站的。我看过Folder Structure,但我无法比准确的单词/减去几个字符的单词更好地匹配它。还有更多的极端情况意味着上述预期行为无效。

我现在正在看https://github.com/teamtnt/tntsearch。我对ngram的概念有基本的了解,这与搜索单词的一部分有什么关系,但是我不确定这种+模糊匹配是否足以实现此搜索。到目前为止,我只能像以前一样获得完全匹配。

任何人都可以帮我指出正确的方向,以实现您期望的搜索吗?

1 个答案:

答案 0 :(得分:0)

TNTSearch具有出色的功能,可实现类似于精美文字中搜索栏的功能。安装软件包后,您将立即访问fuzzyMatchFromFile函数。

让我们考虑一下您在单个文件夹中有一堆图像并且想要添加搜索功能的情况。

首先,您将目录列表保存到文件中。这可以通过一个简单的命令来完成,例如:

find ./path/to/image/folder -type f -follow -print > image-files.txt

image-files.txt中,每张图片都单独显示

接下来,您将提供此文件作为fuzzyMatchFromFile函数的第二个参数

$query = "someword";
$path = "/path/to/image-files.txt";
$searchResults = fuzzyMatchFromFile($query, $path);

$searchResults数组将包含文件的路径以及得分

如果您有一个名为beautiful-image.png的文件,则也可以使用btfl-img.png进行搜索和查找。

以上内容可快速处理多达10万条记录。

该算法检查查询和文件名之间是否存在common subsequence,如果存在,则计算两个向量之间的cosine similarity(文件名和查询字符串都转换为向量)。另外,如果一个子串 存在,它会增加分数