PHP 单词索引,性能和合理的结果

标签 php mysql performance indexing word

我目前正在为搜索功能开发索引器。索引器将处理来自“字段”的数据。 字段看起来像:

  Field_id   Field_type   Field_name   Field_Data
- 101        text         Name         Intel i7
- 102        integer      Cores        4 physical, 4 virtual
- 103        select       Vendor       Intel
- 104        multitext    Description  The i7 is intel's next gen range of cpus.

索引器将生成以下结果/索引:

  Keyword    Occurrences
- intel      101, 103, 104
- i7         101, 104
- physical   102
- virtual    102
- next       104
- gen        104
- range      104
- cpus       104   (*)
- cpu        104   (*)

所以它看起来有点不错,但是,有一些问题我想解决:

  • 过滤掉常用词(您可能已经注意到,列表中缺少“the”、“is”、“of”和“intel's”)
  • 关于“cpus”(复数与单数),最好是同时使用特定类型(单数或复数)还是完全使用(即“cpus”与“cpu”不同)?
  • 继续上一项,我如何确定复数(不同的口味:test=>tests fish=>fish and leaf=>leaves)
  • 我目前正在使用 MySql,我非常担心性能问题;我们有 500 多个类别,我们甚至没有启动网站
  • 假设我想使用搜索词“vendor:intel”,其中 vendor 指定字段名称 (field_name),您认为这会对 sql server 产生巨大影响吗?
  • 搜索限制;我一点也不喜欢这样,但这是有可能的,如果您知道任何变通办法,请说出来!
  • 还有其他问题我可能忘记了,如果您发现任何问题,欢迎您对我大喊大叫 ;-)
  • 我不需要搜索引擎抓取链接,事实上,我特别希望它不抓取链接

(顺便说一下,我对英特尔没有偏见,我只是碰巧拥有一台基于 i7 的电脑 ;-))

最佳答案

从这里获取停用词(非关键字)列表,这家伙甚至为您在 php 中格式化了它们。 http://armandbrahaj.blog.al/2009/04/14/list-of-english-stop-words/

然后只需对要索引的字符串执行 preg_replace。

我过去所做的是使用正则表达式删除“s”、“ed”等后缀,并在搜索字符串上使用相同的正则表达式。虽然这并不理想。这是一个只有 200 页的基本网站。

如果您担心性能,您可能需要考虑使用 Lucine (solr) 等搜索引擎而不是数据库。这将使索引更容易。您不想在这里重新发明轮子。

关于PHP 单词索引,性能和合理的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3315910/

相关文章:

php - 如何使用javascript和数据库mysql创建数组?

php - 调用未定义函数 array_column()

php - 从 mysql 数据填充下拉列表(如果在单独的数据库中,则从下拉列表中删除)- php/html

java - SOLR 新手,需要一些安装帮助

android - 从 json 响应中的字节数组下载图像

php - 使用 php mysql 从类别中获取数据

php mail() header 阻止电子邮件发送

MySQL 交叉表查询配置文件表

java - 获取所有数字的 3、5、7 倍数之和直到 1000 的函数

c++ - 使用 movsd 使编译器复制字符