我有两个关于数据库中全文搜索的相当普遍的问题。我正在寻找弹性搜索和solr,在我看来,需要生成由表条目组成的单独文档,然后进行搜索。那么这种搜索的结果实际上并不是数据库条目?或者我误解了什么?
我还研究了whoosh搜索,它执行索引表列,而whoosh的结果是实际的表行。 当使用solr或弹性搜索时,我应该将行id放入搜索到的文档中吗?在我获得结果后使用该id从表中检索相关行?或者有更好的解决方案吗?
我遇到的另一个问题是,如果我有一个像abc / 123.64664这样的id,它存储为一个字符串,那么用FTS搜索这样一个列有什么好处吗?在我看来,索引没有太大的收获?还是我错了? 感谢
答案 0 :(得分:1)
Elasticsearch可以存储索引文档,您可以将其作为查询结果的一部分进行检索。通常ppl仍然将原始数据存储在通常的数据库中,它为重建索引提供了更多的可靠性和灵活性。请注意ES索引非关系数据。您可以以关系方式存储数据并组合非规范化文档以进行索引。
至于#34; abc / 123.64664"你可以将它作为标记化的字符串索引,或者你可以调整索引以进行前缀搜索等。它取决于你
答案 1 :(得分:0)
(TL; DR)不要考虑您的数据在RDBS中的结构。想想你是搜索。
良好的全文搜索内容存储与关系数据库标准存储完全不同。因此,进入搜索引擎的数据最终可能与您存储它的方式完全不同。
这完全取决于您预期的搜索结果。您可以增加数据的粒度或 - 相反 - 反规范化它,以便父/相关记录内容显示在您实际想要作为搜索的一部分返回的记录中。文本处理(copyField,标记化,预处理等)也是进行大量内容修改以使记录可查找的地方。
有时,关系数据库支持全文搜索。 PostgreSQL正在变得越来越好。但大多数情况下,关系数据库并没有提供足够的灵活性来支持良好的相关性驱动的搜索。
最后,如果原始模式非常复杂,那么仅使用搜索引擎来获取正确的相关ID,然后在客户端代码中将它们与原始数据库记录中的详细信息合并,这可能是有意义的。