मैंने पुस्तकों का एक Lucene.net अनुक्रमणिका बनाई है। सभी अच्छी तरह से काम कर रहे हैं लेकिन मुझे इंडेक्स से पूछने के लिए एक और तरीका जोड़ने की जरूरत है और मैं यह नहीं समझ सकता कि इसे कैसे किया जाए।Lucene.Net TermRangeQuery से कम/कम से कम?
मूल रूप से प्रत्येक पुस्तक में आयु सीमा होती है जो यह उपयुक्त है। यह दो स्तंभों द्वारा व्यक्त किया जाता है - minAge और maxAge। दोनों कॉलम पूर्णांक हैं।
मैं का अनुक्रमण कर रहा हूँ और निम्नलिखित पाश
foreach (var catalogueBook in books)
{
var book = new Book(catalogueBook.CatalogueBookNo,catalogueBook.IssueId);
var strTitle = book.FullTitle ?? "";
var strAuthor = book.Author ?? "";
// create a Lucene document for this book
var doc = new Document();
// add the ID as stored but not indexed field, not used to query on
doc.Add(
new Field(
"BookId",
book.CatalogueBookNo.ToString(System.Globalization.CultureInfo.InvariantCulture),
Field.Store.YES,
Field.Index.NOT_ANALYZED_NO_NORMS,
Field.TermVector.NO));
// add the title and author as stored and tokenized fields, the analyzer processes the content
doc.Add(
new Field("FullTitle",
strTitle.Trim().ToLower(),
Field.Store.YES,
Field.Index.ANALYZED,
Field.TermVector.NO));
doc.Add(
new Field("Author",
strAuthor.Trim().ToLower(),
Field.Store.YES,
Field.Index.ANALYZED,
Field.TermVector.NO));
doc.Add(
new Field("IssueId",
book.IssueId,
Field.Store.YES,
Field.Index.NOT_ANALYZED_NO_NORMS,
Field.TermVector.NO));
doc.Add(
new Field(
"PublicationId",
book.PublicationId.Trim().ToLower(),
Field.Store.YES,
Field.Index.NOT_ANALYZED_NO_NORMS,
Field.TermVector.NO));
doc.Add(
new Field(
"MinAge",
book.MinAge.ToString("0000"),
Field.Store.YES,
Field.Index.NOT_ANALYZED_NO_NORMS,
Field.TermVector.NO));
doc.Add(
new Field(
"MaxAge",
book.MaxAge.ToString("0000"),
Field.Store.YES,
Field.Index.NOT_ANALYZED_NO_NORMS,
Field.TermVector.NO));
doc.Add(new NumericField("Price",Field.Store.YES,true).SetDoubleValue(Convert.ToDouble(book.Price)));
//Now we can loop through categories
foreach(var bc in book.GetBookCategories())
{
doc.Add(
new Field("CategoryId",
bc.CategoryId.Trim().ToLower(),
Field.Store.YES,
Field.Index.NOT_ANALYZED_NO_NORMS,
Field.TermVector.NO));
}
// add the document to the index
indexWriter.AddDocument(doc);
}
// make lucene fast
indexWriter.Optimize();
}
में इन क्षेत्रों के भंडारण आप देख सकते हैं मैं minAge और maxAge फ़ील्ड padding हूँ के रूप में मैंने सोचा कि यह इसके खिलाफ एक TermRangeQuery चलाने के लिए सबसे आसान होगा।
हालांकि मुझे यह देखने के लिए आयु के साथ minAge और maxAge कॉलम दोनों से पूछताछ करने की आवश्यकता है कि यह आयु minAge और maxAge द्वारा परिभाषित आयु सीमा में होती है या नहीं।
Sql होगा
Select *
From books
where @age >= minAge and @age <= maxAge
दुर्भाग्य से मैं यह करने के लिए एक तरह से नहीं देख सकता। क्या यह लुसीन.Net में भी संभव है?
बढ़िया आपकी सलाह के लिए इस्तेमाल किया है और यह एक का इलाज काम किया। खोज के समाधान के साथ समाप्त हुआ जो मैं नीचे उल्लिखित करूँगा। – wingyip