【发布时间】:2010-11-14 06:43:57
【问题描述】:
在 lucene.net 中我们可以在不提供字段名称的情况下搜索内容..它会搜索所有被索引的字段。
【问题讨论】:
标签: lucene.net
在 lucene.net 中我们可以在不提供字段名称的情况下搜索内容..它会搜索所有被索引的字段。
【问题讨论】:
标签: lucene.net
它将默认搜索架构中指定的所有字段。
【讨论】:
使用MultiFieldQueryParser 解析您的查询,并为它提供您要搜索的字段名称数组。
查询不需要任何特殊语法。如果您的查询是“cat hat”,它将在所有指定字段中搜索这些术语中的任何一个。如果您的默认运算符是 AND,则需要在至少一个字段中找到每个术语。
【讨论】:
如果不提供字段名称,您将无法搜索内容,但是您可以使用 MultiFieldQueryParser 在所有可用字段中进行搜索。
例如
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
希望有所帮助
【讨论】: