2

我使用 Solr (SolrCloud) 来索引和搜索我的推文。大约有 1600 万条推文,索引大小约为 3 GB。推文在出现时会被实时索引,以便启用实时搜索。目前我使用lowercase字段类型作为我的推文正文字段。对于搜索中的单个搜索词,大约需要 7 秒,并且随着每个搜索词的添加,搜索所花费的时间线性增加。3GB 是为 solr 进程分配的最大 RAM。示例 solr 搜索查询如下所示

tweet_body:*big* AND tweet_body:*data* AND tweet_tag:big_data

关于提高搜索速度的任何建议?目前我只运行 1 个包含整个推文集合的分片。

4

2 回答 2

3

tweet_body:*big*预计该查询的性能会很差。尾随通配符很容易,可以使用 ReversedWildcardFilterFactory 轻松处理前导通配符。然而,两者都必须扫描每个文档,而不是能够利用索引来定位匹配的文档。结合这两种方法只会让你搜索:

tweet_body:*big tweet_body:big*

这不是一回事。如果您确实必须搜索带有前导和尾随通配符的术语,我建议您将数据索引为 N-gram。


我以前不知道,但lowercase字段类型似乎是小写过滤的关键字分析器。这不是你想要的。这意味着整个字段被视为单个标记。适用于标识号等,但不适用于您希望对其执行全文搜索的正文。

所以是的,你需要改变它。 text_general可能是合适的。这将索引一个正确标记的字段,并且您应该能够执行您正在寻找的查询:

tweet_body:big AND tweet_body:data AND tweet_tag:big_data

您将不得不重新编制索引,但这是无法避免的。没有对关键字字段执行全文搜索的好方法。

于 2012-12-19T23:56:49.067 回答
0

尝试使用过滤器查询,因为过滤器查询并行运行

于 2013-10-28T10:00:26.813 回答