【问题标题】:Search engine (solr/sphinx) on database数据库上的搜索引擎(solr/sphinx)
【发布时间】:2010-12-26 14:09:54
【问题描述】:

我想让我的线程内容可以使用 solr 等全文搜索引擎进行搜索。

我想知道一件事;我应该只索引 thread.title、thread.body 和 post.body 还是应该索引用户名、创建日期、帖子的 nr、视图、国家、地区和城市也属于线程?

我的意思是当用户搜索一个话题时,他们会得到包含话题标题、2 行正文、哪个用户发布它、创建日期、标签等的点击返回。

我也应该索引所有这些信息吗?但它几乎是整个数据库,还是我应该只索引我提到的前 3 列进行全文搜索?

另一个问题:当用户发布新帖子时,我必须立即告诉 solr 添加该行吗?如果我不是,它怎么能被搜索到?

【问题讨论】:

  • 只有知道你的应用程序需要搜索什么样的信息。这就像询问您应该在关系数据库中存储什么样的信息。
  • 请针对不同的问题创建单独的问题。不要将所有内容都放在同一个问题中。

标签: php database indexing solr


【解决方案1】:

我使用过 Apache Lucene,但还没有使用过 Apache Solr。所以我在推断这个答案的一部分。但是 Lucene 索引是 Solr 的强大功能,所以我认为它几乎相同。

我会将您可能想要的所有内容添加为可搜索内容的一部分或作为搜索结果返回。

请注意,Lucene 允许您将字段添加到文档中作为“未分析”——这意味着这些字段不是可搜索内容的一部分。但是,当您进行搜索并找到该文档时,会返回额外的字段。另一种方法是只包含主键,然后您必须在找到匹配的文档后使用它来执行 SQL 查找。

Lucene 还支持对索引中特定字段的查询。因此,您可以在索引中包含所有字段,但如果您希望给定搜索仅匹配字段的子集,您可以这样做。

最后,是的,您必须使 Lucene/Solr 索引与数据库中的数据保持同步。您可以使用DataImportHandler 帮助将批量数据从 RDBMS 加载到 Solr 服务器。或者,如果您需要在创建新线程时对其进行实时索引,则可以使用 Solr 的类似 REST 的 HTTP 接口发布单个文档。

【讨论】:

  • 感谢您如此彻底地回答。如果我使用 sql 查找其他所有内容,那么我必须在 php 中运行它。然后我不能只使用 jquery 和 solr。我必须使用 jquery ajax 将变量发送到 php,然后 php 联系 solr,获取信息,然后进行 sql 查找,然后将其返回给 jquery。这听起来比直接通过 jquery 获取 solr 数据更多的编码。所以我可能应该像你说的那样对所有内容进行索引,而其余的内容则不可搜索。我用什么命令向 solr 发送查询字符串并使用 php 从 solr 获取数据??
  • 由于 Solr 有一个 REST 接口,您可以使用 PHP 的 curl 扩展来发出请求:php.net/curl
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-23
  • 1970-01-01
  • 2011-06-06
  • 2010-11-26
  • 2011-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多