在lucene.net中,我们可以在不提供字段名称的情况下搜索内容。它将搜索所有已编入索引的字段吗?

时间:2009-07-27 06:52:51

标签: lucene.net

在lucene.net中,我们可以在不提供字段名称的情况下搜索内容。它将搜索所有已编制索引的字段。

3 个答案:

答案 0 :(得分:10)

如果不提供字段名称,则无法搜索内容,但是您可以使用MultiFieldQueryParser搜索所有可用字段。

E.g

Dim queryParser = New MultiFieldQueryParser(Version.LUCENE_29, _
    indexReader__1.GetFieldNames(IndexReader.FieldOption.ALL).ToArray(), analyzer)

这里是一个完整的例子。

'get index directory
Dim directory As Directory = FSDirectory.Open(New DirectoryInfo(HostingEnvironment.MapPath(VirtualIndexPath)))

'get analyzer
Dim analyzer As Analyzer = New StandardAnalyzer(Version.LUCENE_29)

'get index reader and searcher
Dim indexReader__1 As IndexReader = IndexReader.Open(directory, True)
Dim indexSearch As Searcher = New IndexSearcher(indexReader__1)

'add all possible fileds in multifieldqueryparser using indexreader getFieldNames method
Dim queryParser = New MultiFieldQueryParser(Version.LUCENE_29, _
    indexReader__1.GetFieldNames(IndexReader.FieldOption.ALL).ToArray(), analyzer)
Dim query = queryParser.Parse(Criteria)
Dim resultDocs As TopDocs = Nothing

'perform search
resultDocs = indexSearch.Search(query, indexReader__1.MaxDoc())
Dim hits = resultDocs.scoreDocs

希望有帮助

答案 1 :(得分:1)

默认情况下,它将搜索模式中指定的所有字段。

答案 2 :(得分:1)

使用MultiFieldQueryParser解析您的查询,并为其提供您要搜索的字段名称数组。

查询不需要任何特殊语法。如果您的查询是“cat hat”,它将搜索所有指定字段中的任何一个术语。如果您的默认运算符是AND,则需要在至少一个字段中找到每个术语。