我想让我的线程内容可以使用全文搜索引擎(如 solr)进行搜索。
我想知道一件事;我应该只索引 thread.title、thread.body 和 post.body 还是应该索引属于线程的用户名、创建日期、帖子编号、 View 、国家、地区和城市?
我的意思是,当用户搜索主题时,他们将返回包含主题标题、两行正文、用户发布的主题、创建日期、标签等的匹配。
我是否也应该为所有这些信息编制索引?但这几乎是整个数据库,还是我应该只索引我提到的用于全文搜索的前 3 列?
另一个问题:当用户发布一个新线程时,我必须立即告诉 solr 添加该行吗?如果我不是,如何搜索它?
最佳答案
我用过 Apache Lucene,但还没有用过 Apache Solr。所以我正在推断这个答案的一些内容。但是 Lucene 索引是 Solr 的动力,所以我认为它几乎是一样的。
我会添加您可能想要的所有内容作为可搜索内容的一部分或作为搜索结果返回。
请注意,Lucene 允许您将字段添加到文档中作为“未分析”——这意味着这些字段不是可搜索内容的一部分。但是当您进行搜索并找到该文档时,会返回额外的字段。另一种方法是仅包含主键,然后您必须在找到匹配文档后使用它进行 SQL 查找。
Lucene 还支持针对索引中特定字段的查询。因此,您可以在索引中包含所有字段,但如果您希望给定搜索仅匹配字段的子集,则可以这样做。
最后,是的,您必须使 Lucene/Solr 索引与数据库中的数据保持同步。您可以使用 DataImportHandler帮助将 RDBMS 中的批量数据加载到 Solr 服务器。或者您可以使用 Solr 的类似 REST 的 HTTP 接口(interface)来发布单个文档,如果您需要在创建新线程时对它们进行实时索引的话。
关于php - 数据库上的搜索引擎(solr/sphinx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1903566/