2011-10-23 6 views
5

ok, tôi đã tìm kiếm điều này trong hai giờ qua với kết quả chỉ cung cấp mẹo, và thậm chí không một mã hoàn chỉnh để giải cứu (như thế nào noobs sẽ tìm hiểu xem họ không thể thấy một số ? mẫu)Lucene - tìm kiếm trường giá trị số

tôi đã tạo ra một chỉ số như sau:

Directory directory = FSDirectory.Open(new System.IO.DirectoryInfo(Server.MapPath("/data/channels/"))); 
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29); 
IndexWriter writer = new IndexWriter(directory, analyzer, true, Lucene.Net.Index.IndexWriter.MaxFieldLength.UNLIMITED); 
Document doc = new Document(); 
doc.Add(new Field("ID", "0", Field.Store.YES, Field.Index.NO)); 
doc.Add(new Field("parentID", "0", Field.Store.YES, Field.Index.NO)); 
doc.Add(new Field("Title", "Root", Field.Store.YES, Field.Index.ANALYZED)); 
writer.AddDocument(doc); 
writer.Optimize(); 
writer.Close(); 

Bây giờ, tôi muốn tìm kiếm các lĩnh vực ID trường hợp giá trị tương đương với 0 (để có được hồ sơ duy nhất tôi có ở đó) ... .

nhưng, một tìm kiếm đơn giản như thế này:

Directory directory = FSDirectory.Open(new System.IO.DirectoryInfo(Server.MapPath("/data/channels"))); 
Analyzer analyzer = new Lucene.Net.Analysis.Standard.StandardAnalyzer(Version.LUCENE_29); 
Searcher searcher = new Lucene.Net.Search.IndexSearcher(IndexReader.Open(directory, true)); 
Query query = new Lucene.Net.QueryParsers.QueryParser(Version.LUCENE_29, "ID", analyzer).Parse("0"); 
Hits hits = searcher.Search(query); 

không trả lại kết quả nào. tôi đã đọc về NumericRange, KeywordAnalyzer và một số thứ khác, nhưng vì không có mẫu nào cung cấp mẫu, tôi không thể tìm ra cách thực hiện.

xin vui lòng, những người tử tế, hãy cho tôi một ví dụ về cách làm cho điều này hoạt động.

Trả lời

7

Thay đổi Field.Index.NO-Field.Index.ANALYZED (hoặc Field.Index.NOT_ANALYZED) trong lĩnh vực ID

9

Tôi đã sử dụng NumericField và NumericRangeQuery để tìm kiếm các chỉ số Lucene cho số.

Khi tạo chỉ số:

NumericField taxonRankSortOrder = new NumericField("TaxonRankSortOrder", Field.Store.YES, true); 
    taxonRankSortOrder.SetIntValue(rank); 
    document.Add(taxonRankSortOrder); 

Và sau đó sử dụng một truy vấn:

NumericRangeQuery query = NumericRangeQuery.NewIntRange("TaxonRankSortOrder", 3000, 3000, true, true); 

sẽ trả lại toàn bộ tài liệu với một TaxonRankSortOrder bằng 3000.

Bạn cần phải tạo ra các truy vấn bản thân bạn hơn là sử dụng QueryParser vì vậy sẽ muốn biết liệu có cách tiếp cận tốt hơn hay không.

+4

Nếu bạn chỉ tìm kiếm một int, bạn không cần phải tìm kiếm theo phạm vi. Chỉ cần sử dụng điều này: Truy vấn truy vấn = new TermQuery (thuật ngữ mới ("TaxonRankSortOrder", NumericUtils.IntToPrefixCoded (3000))); –