gpt4 book ai didi

php - 支持模糊搜索的最容易实现的站点搜索应用程序是什么?

转载 作者:可可西里 更新时间:2023-11-01 07:04:00 25 4
gpt4 key购买 nike

我有一个网站需要搜索大约 20-30k 条记录,其中大部分是电影和电视节目的名称。该站点使用内存缓存运行 php/mysql。

我希望将 FULLTEXT 替换为我目前拥有的 soundex() 搜索,这很有效……有点,但在很多情况下不是很好.

是否有任何易于实现的体面的搜索脚本,并将提供体面的搜索功能(表格中的 3 列)。

最佳答案

ewemli 的回答是正确的,但你应该结合 FULLTEXT 和 soundex 映射,而不是替换全文,否则你的 LIKE 查询可能会很慢。

create table with_soundex (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
original TEXT,
soundex TEXT,
FULLTEXT (soundex)
);

insert into with_soundex (original, soundex) values

('add some test cases', CONCAT_WS(' ', soundex('add'), soundex('some'), soundex('test'), soundex('cases'))),
('this is some text', CONCAT_WS(' ', soundex('this'), soundex('is'), soundex('some'), soundex('text'))),
('one more test case', CONCAT_WS(' ', soundex('one'), soundex('more'), soundex('test'), soundex('case'))),
('just filling the index', CONCAT_WS(' ', soundex('just'), soundex('filling'), soundex('the'), soundex('index'))),
('need one more example', CONCAT_WS(' ', soundex('need'), soundex('one'), soundex('more'), soundex('example'))),
('seems to need more', CONCAT_WS(' ', soundex('seems'), soundex('to'), soundex('need'), soundex('more')))
('some helpful cases to consider', CONCAT_WS(' ', soundex('some'), soundex('helpful'), soundex('cases'), soundex('to'), soundex('consider')))

select * from with_soundex where match(soundex) against (soundex('test'));
+----+---------------------+---------------------+
| id | original | soundex |
+----+---------------------+---------------------+
| 1 | add some test cases | A300 S500 T230 C000 |
| 2 | this is some text | T200 I200 S500 T230 |
| 3 | one more test case | O500 M600 T230 C000 |
+----+---------------------+---------------------+

select * from with_soundex where match(soundex) against (CONCAT_WS(' ', soundex('test'), soundex('some')));
+----+--------------------------------+---------------------------+
| id | original | soundex |
+----+--------------------------------+---------------------------+
| 1 | add some test cases | A300 S500 T230 C000 |
| 2 | this is some text | T200 I200 S500 T230 |
| 3 | one more test case | O500 M600 T230 C000 |
| 7 | some helpful cases to consider | S500 H414 C000 T000 C5236 |
+----+--------------------------------+---------------------------+

这提供了相当不错的结果(在 soundex 算法的限制内),同时最大限度地利用了索引(任何查询 LIKE '%foo' 都必须扫描表中的每一行)。

请注意对每个单词而不是整个短语运行 soundex 的重要性。您也可以在每个单词上运行您自己的 soundex 版本,而不是让 SQL 执行它,但在这种情况下,请确保在存储和检索时都执行它,以防算法之间存在差异(例如,MySQL 的算法不限制本身符合标准 4 chars )

关于php - 支持模糊搜索的最容易实现的站点搜索应用程序是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1899470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com