2009-07-27 20 views

Trả lời

10

Bạn không thể tìm kiếm nội dung mà không cung cấp tên trường, tuy nhiên bạn có thể sử dụng MultiFieldQueryParser để tìm kiếm trong tất cả các trường có sẵn.

ví dụ

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

ở đây là hoàn toàn một ví dụ.

'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 

hy vọng rằng giúp

+1

Điều này cực kỳ hữu ích và phải được đánh dấu là câu trả lời cho câu hỏi này vì tôi đã thử nó và nó hoạt động! –

1

Nó sẽ tìm kiếm tất cả các trường được chỉ định trong lược đồ như được tìm kiếm theo mặc định.

+1

bạn có thể vui lòng cung cấp cho tôi đoạn mã, syntax..for làm thế nào bạn sẽ viết truy vấn cho giống nhau. – devson

1

Sử dụng MultiFieldQueryParser để phân tích truy vấn của bạn và cung cấp cho nó một mảng tên trường bạn muốn tìm kiếm.

Truy vấn không cần bất kỳ cú pháp đặc biệt nào. Nếu truy vấn của bạn là "mũ mèo", nó sẽ tìm kiếm tất cả các trường được chỉ định cho một trong hai thuật ngữ này. Nếu toán tử mặc định của bạn là AND, nó sẽ yêu cầu mỗi thuật ngữ được tìm thấy trong ít nhất một trường.

+1

Tác giả được đề cập cụ thể * mà không * cung cấp tên trường. – devios1

Các vấn đề liên quan