2009-07-27 33 views

回答

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

這是非常有用的,應該被標記爲這個問題的答案,因爲我已經嘗試過它,它的工作原理! – 2012-10-04 15:06:17

1

它將搜索默認爲搜索模式中的這些指定的所有字段。

+1

能否請您爲我提供的代碼片段,syntax..for你將如何編寫相同的查詢。 – devson 2009-07-27 07:12:25

1

使用MultiFieldQueryParser解析您的查詢,併爲其提供你想要搜索的字段名稱的數組。

查詢不需要任何特殊的語法。如果您的查詢是「貓咪帽子」,它將搜索所有指定的字段中的任一條款。如果您的默認運算符爲AND,則需要至少在一個字段中找到每個術語。

+1

作者特別提到*沒有給出字段名稱。 – devios1 2011-03-23 02:47:53