为了允许用户使用 Lucene 3.5 搜索多个字段,我目前为要搜索的每个字段创建并添加一个QueryParser到DisjunctionMaxQuery。这在使用OR作为默认运算符时效果很好,但我现在想将默认运算符更改为AND以获得更准确(和更少)的结果。
问题是,queryParser.setDefaultOperator(QueryParser.AND_OPERATOR)
由于所有术语必须在至少 1 个字段中,因此遗漏了许多文档。
例如,考虑文档的以下数据:title field = "Programming Languages",body field = "Java, C++, PHP"。如果用户要搜索Java Programming,则此特定文档不会包含在结果中,因为标题和正文字段包含查询中的所有术语,尽管它们组合在一起。我希望为上述查询返回此文档,而不是为查询HTML Programming。
我考虑过一个包罗万象的领域,但我有一些问题。首先,用户经常在他们的查询中包含每个字段的术语(作者:bill),这对于一个包罗万象的字段是不可能的。此外,我使用 FastVectorHighlighter 突出显示某些字段,这需要对它们进行索引和存储。因此,通过添加一个包罗万象的字段,我将不得不对大多数相同的数据进行两次索引,这既费时又费空间。
有任何想法吗?