2009-07-27 3 views

risposta

10

Non è possibile cercare il contenuto senza nome campo, tuttavia è possibile utilizzare MultiFieldQueryParser per cercare in tutti i campi disponibili.

es

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

qui è un esempio completo.

'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 

speranza che aiutano

+1

Questo è estremamente utile, e dovrebbe essere contrassegnato come la risposta a questa domanda come ho provato e funziona! –

1

Cerca tutti i campi specificati nello schema come ricercati per impostazione predefinita.

+1

Potete per favore fornirmi frammento di codice, syntax..for come si intende scrivere query per la stessa. – devson

1

Utilizzare MultiFieldQueryParser per analizzare le query e fornire una matrice dei nomi dei campi che si desidera cercare.

La query non richiede alcuna sintassi speciale. Se la tua query è "cat hat", cercherà tutti i campi specificati per uno di questi termini. Se il tuo operatore predefinito è AND, richiederà che ogni termine sia trovato in almeno un campo.

+1

L'autore ha specificamente menzionato * senza * fornendo i nomi dei campi. – devios1

Problemi correlati