【问题标题】:Lucene search ton of namesLucene 搜索大量名称
【发布时间】:2019-03-04 17:08:01
【问题描述】:

我试图根据 lucene 索引搜索大量名称(10000+),这些名称是从文本文件中加载的。 这是我的代码的 sn-p:

Analyzer analyzer = new StandardAnalyzer();
MultiFieldQueryParser mParser = new MultiFieldQueryParser(arrSearchFields,
  analyzer);

Query keyWordsQuery = mParser.parse(names);

- 首先我得到错误:太多布尔子句 在 org.apache.lucene.queryparser.classic.QueryParserBase.parse(QueryParserBase.java:118)

作为在互联网上搜索,我可以通过

BooleanQuery.setMaxClauseCount(Integer.MAX_VALUE);

但是搜索速度很慢,而且占用大量内存。

对这个案例有什么建议吗?

欣赏它。

詹姆斯

【问题讨论】:

  • arrSearchFieldsnames 变量中有什么?
  • 你的索引里面有什么?
  • 我正在使用lucene构建索引; arrSearchFields 是一个数组,用于保存正文、附件等多个字段

标签: lucene keyword-search booleanquery


【解决方案1】:

我知道这是旧的,但我希望有人觉得这很有用。

使用 Lucene 8.6.1,您可以使用以下查询来避免“太多子句”异常

(field1: term1 OR term2 OR .... OR term1024) OR (field1: term1025 OR trem1026 OR .... OR term2000)

而不是

field1: term1 OR term2 OR term3 OR .... OR term2000

基本上,只需将查询分解为每个字段一次不超过 1024 个术语。

我不确定内存使用情况或这将有多快,但我的目的是让它正常工作而不会引发错误。

您可能还想查看thisthisthis

【讨论】:

    猜你喜欢
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    相关资源
    最近更新 更多