2009-07-27 16 views

答えて

10

フィールド名を入力せずにコンテンツを検索することはできません。ただし、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 

+1

これは非常に便利です。試してみたところ、この質問に対する答えとしてマークする必要があります。 –

1

デフォルトで検索されるように、スキーマで指定されたすべてのフィールドを検索します。

+1

あなたは私のコードスニペットを提供してくださいすることができ、syntax..forあなたが同じのためのクエリを作成する方法を助ける希望。 – devson

1

クエリを解析するには、MultiFieldQueryParserを使用し、検索するフィールド名の配列を入力します。

クエリには特別な構文は必要ありません。クエリが "cat hat"の場合、指定されたすべてのフィールドをこれらの用語のいずれかで検索します。デフォルトの演算子がANDの場合は、各項が少なくとも1つのフィールドに含まれている必要があります。

+1

著者は特に、フィールド名をつけずに*を記述しました。 – devios1

関連する問題