![]() |
1
1
这是对你最初的问题的回应,你后来的问题 answer/question . 我已经用过了 Sphinx 搜索引擎之前(很久以前,我有点生疏),发现它非常好,即使文档有时有点缺乏。 我敢肯定还有其他方法可以做到这一点,无论是用你自己的自定义代码,还是用其他搜索引擎,斯芬克斯恰好是我用过的。我不是说它可以做任何你想做的事情,就像你想做的那样,但是我可以合理地确定它可以很容易地完成大部分工作,而且比任何单独用php/mysql编写的东西都快得多。 我推荐阅读 Build a custom search engine with PHP 在挖掘之前 Sphinx documentation . 如果你读了那篇文章后觉得不合适,那就公平了。 为了回答您的具体问题,我整理了文档中的一些链接,以及一些相关的引用: 过滤掉常用词(正如您可能注意到的那样,“is”和“intel”在列表中丢失)
关于“CPU”(复数与单数),最好使用特定类型(单数或复数),两者都使用还是精确(即,“CPU”是不同的“CPU”)?
继续上一项,如何确定复数(不同口味:test=>tests fish=>fish and leaf=>leaves) 斯芬克斯支持 Porter Stemming Algorithm
假设我想使用搜索术语“vendor:intel”,其中vendor指定字段名(field_name),您认为这会对SQL Server产生巨大影响吗?
您也可以使用 5.3. Extended query syntax 要搜索特定字段(而不是按属性筛选结果):
搜索引擎如何索引一组字段并将找到的短语/关键字等与特定字段ID绑定?
也看到 Listing 11 和 Listing 13 从 用PHP构建自定义搜索引擎 . |
![]() |
2
3
从这里抓取一个停止词列表(非关键字),这个家伙甚至已经为你用PHP格式化了它们。 http://armandbrahaj.blog.al/2009/04/14/list-of-english-stop-words/ 然后简单地对正在索引的字符串执行preg_替换。 我过去所做的是用regex删除后缀,如's'、'ed'等,并在搜索字符串中使用相同的regex。但这并不理想。这是一个只有200页的基本网站。 如果您关心性能,您可能会考虑使用像Lucine(Solr)这样的搜索引擎而不是数据库。这将使索引更加容易。你不想在这里重新发明轮子。 |
![]() |
3
1
查找(或创建)常用词列表并筛选用户输入。
视情况而定。如果这不是一个很大的负担,我会寻找两者;如果可能的话,我会寻找使用相似子句的单数形式。
创建一个inflector方法或类。IE:
有好的模式和代码设计是有帮助的,但是我不能给你很多关于这个的建议。
这真的很有帮助,因为您将查找单个列而不是多个列。只需小心过滤用户输入和/或只允许查找特定的列。
这里的选择不多。为了帮助提高性能,您应该考虑使用某种缓存。 |
![]() |
4
1
我衷心建议你看看索尔。它是一个基于Java的独立搜索和索引系统,可能比PHP解决方案有更多的好处。 |
![]() |
5
0
搜索很难实现。如果你是新手,建议你使用一个软件包。 你考虑过吗 http://framework.zend.com/manual/en/zend.search.lucene.html ? |
![]() |
6
0
由于许多人建议使用现有的包(我想让您更难接受,而不仅仅是建议一个包;-),我们假设我将使用这样的包(在这个答案线程中)。 搜索引擎如何索引一组字段并将找到的短语/关键字等与特定字段ID绑定? 这不是我想要回答的问题,至少不是直接回答。我的问题是,让搜索引擎按我想要的方式工作有多容易? 考虑到我的上述要求,这是否可能/可行? 从个人经验来看,我宁愿浪费一些时间来调整我的系统,而不是修改别人的代码,我必须浪费更多的时间来先理解别人的代码。 称我为保守派,但我很少坚持别人的代码/程序,当我这样做的时候,那是因为一个绝望的情况-而且我通常会以某种方式为这个项目做出贡献。 |
![]() |
7
0
有一个关于语音标记器brill部分的PHP实现 php/ir . 这可能提供了一个框架来识别那些应该丢弃的单词和那些您想要索引的单词,同时它还标识复数(和根单数)。它并不完美,尽管它是一个处理技术术语的自定义词典,但它可能对解决前三个问题很有用。 |