如何搜索所有字段?

时间:2013-03-02 02:42:02

标签: lucene.net lucene

在Lucene中,我们可以使用TermQuery来搜索带有字段的文本。我想知道如何在一堆字段或所有可搜索的字段中搜索关键字?

3 个答案:

答案 0 :(得分:23)

另一种方法是使用MultiFieldQueryParser

,它不需要为您已有的内容编制任何索引,也不需要组合不同的查询。

您可以提供要搜索的字段列表和查询,这就是全部。

MultiFieldQueryParser queryParser = new MultiFieldQueryParser(
                Version.LUCENE_41, 
                new String[]{"title", "content", "description"},
                new StandardAnalyzer(Version.LUCENE_41));

Query query = queryParser.parse("here goes your query");

这就是我用Java编写的原始lucene库的方法。我不确定lucene.net中MultiFieldQueryParser是否也可用。

答案 1 :(得分:10)

两种方法

1)索引时间方法:使用 catch-all 字段。这只是附加所有字段中的所有文本(输入文档中的文本总数),并将生成的大文本放在单个字段中。您需要在索引时添加一个额外的字段以充当catch-all字段。

2)搜索时方法:使用BooleanQuery组合多个查询,例如TermQuery实例。可以形成那些多个查询以覆盖所有目标字段。

Example检查文章末尾。

如果您在运行时知道目标字段列表,请使用方法2。否则,你必须使用第一种方法。

答案 2 :(得分:4)

使用“MultifieldQueryParser”在所有字段中搜索的另一种简单方法是在查询中使用 IndexReader.FieldOption.ALL

以下是c#中的示例。

/oauth/token

click here查看我对vb.net中相同问题的回答