solr - 用于自动完成的近实时 Solr Facet 查询

标签 solr faceted-search

我正在使用分面查询来自动完成。

例如:

http://localhost:8983/solr/collection1/autocomplete_en?facet.prefix=sol&...

更新处理程序配置为执行软提交:

  <updateHandler class="solr.DirectUpdateHandler2">
    <updateLog>
      <str name="dir">${solr.ulog.dir:}</str>
    </updateLog>
    <autoCommit>
      <maxTime>30000</maxTime>
      <openSearcher>false</openSearcher>
    </autoCommit>
    <autoSoftCommit>
      <maxTime>1000</maxTime>
    </autoSoftCommit>
  </updateHandler>

但是在更新索引之后,facet 查询总是很慢。

该文档说,“软提交将使文档可见,但要付出一定代价。...FieldValueCache 已失效,因此分面查询必须等到缓存刷新”

参见 http://searchhub.org/2013/08/23/understanding-transaction-logs-softcommit-and-commit-in-sorlcloud/

因此即使在软提交之后,facet 查询也总是很慢,因为必须重新计算 FieldValueCache。

具有 DocValues 的 Facets 是实时兼容的,但不幸的是不支持 TextFields。 见http://wiki.apache.org/solr/DocValues

我必须对查询使用过滤器,所以我不能使用建议组件。

我的问题:

  • 还有机会使用近乎实时的分面搜索吗?
  • Elasticsearch 是如何解决这个问题的?

最佳答案

更改 facet.method 可能会有所帮助。 fc 作为默认值不适合在全文字段上分面。

在我的例子中,enum 帮助:

http://localhost:8983/solr/collection1/autocomplete_en?facet.prefix=sol&facet.method=enum...

但对于较大的索引,即使 enum 也可能太慢。

如果您不需要查询过滤器,您应该考虑建议组件: http://wiki.apache.org/solr/Suggester

接近实时也是一个问题。 但在大多数用例中,优化后的更新就足够了。

关于solr - 用于自动完成的近实时 Solr Facet 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20645299/

相关文章:

Elasticsearch 方面术语与标签

solr - 有没有办法用不同的配置文件运行 NUTCH?

apache - 使用过滤器查询* :*?时,Solr默认情况下如何排序

python - 嵌套在 Python 列表中的元组的任意排序

java - 获取某个类别的文档数量

mysql - 如何在mysql中创建分面搜索?

mysql - PHP MYSQL Solr 自动更新

solr - 如何通过分片将嵌入式solr相互连接

mysql - 我如何知道 solr 索引中有什么?

lucene - Lucene 3.5中分组和构面之间有什么区别