我使用Solr(SolrCloud)索引和搜索我的推文。大约有1600万条推文,索引大小约为3 GB。这些推文在发布时会实时编入索引,以便启用实时搜索。目前我使用lowercase
字段类型作为我的推文正文字段。对于搜索中的单个搜索词,大约需要7秒,并且通过添加每个搜索词,搜索所花费的时间呈线性增长。 3GB是为solr进程分配的最大RAM。示例solr搜索查询如下所示
tweet_body:*big* AND tweet_body:*data* AND tweet_tag:big_data
有关提高搜索速度的建议吗?目前我只运行一个包含整个推文集的分片。
答案 0 :(得分:3)
查询tweet_body:*big*
可能会表现不佳。尾随通配符很简单,使用ReversedWildcardFilterFactory可以轻松处理Leading Wildcards。但是,两者都必须扫描每个文档,而不是能够利用索引来查找匹配的文档。结合这两种方法只允许您搜索:
tweet_body:*big tweet_body:big*
这不是一回事。如果您真的必须使用前导和尾随通配符搜索术语,我建议您将数据索引为N-gram。
我以前没有意识到这一点,但似乎lowercase
字段类型是一个小写过滤的KeywordAnalyzer。这不是你想要的。这意味着整个字段被视为单个标记。适用于识别号码等,但不适用于您希望执行全文搜索的文本正文。
所以是的,你需要改变它。 text_general
可能是合适的。这将索引一个正确的标记化字段,您应该能够执行以下查询:
tweet_body:big AND tweet_body:data AND tweet_tag:big_data
你必须重新索引,但没有避免这种情况。没有好的,高效的方法来对关键字字段执行全文搜索。
答案 1 :(得分:0)
尝试使用过滤器查询,因为过滤器查询并行运行