Lucene 了解为什么带有BooleanQuery的TermRangeQuery没有返回值
我试图对搜索结果应用过滤器,我可以成功应用“精确匹配”过滤,但我试图理解为什么我试图对字符串字段使用TermRangeQuery,但我没有得到任何结果。e、 g.给定此索引(我在下面的示例中使用布尔查询,因为我最终希望应用一组过滤器) 我可以查询苹果的确切匹配项Lucene 了解为什么带有BooleanQuery的TermRangeQuery没有返回值,lucene,lucene.net,Lucene,Lucene.net,我试图对搜索结果应用过滤器,我可以成功应用“精确匹配”过滤,但我试图理解为什么我试图对字符串字段使用TermRangeQuery,但我没有得到任何结果。e、 g.给定此索引(我在下面的示例中使用布尔查询,因为我最终希望应用一组过滤器) 我可以查询苹果的确切匹配项 Using reader As IndexReader = IndexReader.Open(directory, True) Using Searcher As New IndexSearcher(reader
Using reader As IndexReader = IndexReader.Open(directory, True)
Using Searcher As New IndexSearcher(reader)
Using analyzer As New StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30)
Dim query As New MatchAllDocsQuery ''all docs
Dim boolFilter As New BooleanQuery
boolFilter.Add(New TermQuery(New Term("Filter_Name", "Apple")), Occur.MUST) ''Exact match for Apple
Dim filter As New QueryWrapperFilter(boolFilter)
Dim collector = TopScoreDocCollector.Create(reader.MaxDoc, False)
Searcher.Search(query, filter, collector)
End Using
End Using
End Using
但是我想执行大于或小于该查询,我尝试使用TermRangeQuery在Name字段中查找结果(已分析)介于和Apple和Orange之间,但返回的结果为0
Using reader As IndexReader = IndexReader.Open(directory, True)
Using Searcher As New IndexSearcher(reader)
Using analyzer As New StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30)
Dim query As New MatchAllDocsQuery ''all docs
Dim boolFilter As New BooleanQuery
boolFilter.Add(New TermRangeQuery("Name", "Apple", "Orange", True, True), Occur.MUST)
Dim Filter As New QueryWrapperFilter(boolFilter)
Dim collector = TopScoreDocCollector.Create(reader.MaxDoc, False)
Searcher.Search(query, filter, collector)
Debug.WriteLine("Total hits Name TermRangeQuery (Apple TO Orange): " + collector.TotalHits.ToString)
Dim topDocs = collector.TopDocs
For Each scoreDoc In TopDocs.ScoreDocs
Dim doc As Document = Searcher.Doc(scoreDoc.Doc)
Debug.WriteLine("Name: " + doc.GetField("Name").StringValue + " Doc ID: " + scoreDoc.Doc.ToString)
Next
End Using
End Using
End Using
对字段过滤器名称执行相同的查询(未分析)会返回结果
Using reader As IndexReader = IndexReader.Open(directory, True)
Using Searcher As New IndexSearcher(reader)
Using analyzer As New StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30)
Dim query As New MatchAllDocsQuery ''all docs
Dim boolFilter As New BooleanQuery
boolFilter.Add(New TermRangeQuery("Filter_Name", "Apple", "Orange", True, True), Occur.MUST)
Dim Filter As New QueryWrapperFilter(boolFilter)
Dim collector = TopScoreDocCollector.Create(reader.MaxDoc, False)
Searcher.Search(query, filter, collector)
Debug.WriteLine("Total hits Name TermRangeQuery (Apple TO Orange): " + collector.TotalHits.ToString)
Dim topDocs = collector.TopDocs
For Each scoreDoc In TopDocs.ScoreDocs
Dim doc As Document = Searcher.Doc(scoreDoc.Doc)
Debug.WriteLine("Name: " + doc.GetField("Name").StringValue + " Doc ID: " + scoreDoc.Doc.ToString)
Next
End Using
End Using
End Using
我在其他lucene示例中看到,我应该能够使用通配符(如[Orange to*])执行RangeQuery,但我无法生成任何结果,因为我遗漏了一些基本的/明显的关于过滤应该或如何工作的内容
m、 谢谢
Using reader As IndexReader = IndexReader.Open(directory, True)
Using Searcher As New IndexSearcher(reader)
Using analyzer As New StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_30)
Dim query As New MatchAllDocsQuery ''all docs
Dim boolFilter As New BooleanQuery
boolFilter.Add(New TermRangeQuery("Filter_Name", "Apple", "Orange", True, True), Occur.MUST)
Dim Filter As New QueryWrapperFilter(boolFilter)
Dim collector = TopScoreDocCollector.Create(reader.MaxDoc, False)
Searcher.Search(query, filter, collector)
Debug.WriteLine("Total hits Name TermRangeQuery (Apple TO Orange): " + collector.TotalHits.ToString)
Dim topDocs = collector.TopDocs
For Each scoreDoc In TopDocs.ScoreDocs
Dim doc As Document = Searcher.Doc(scoreDoc.Doc)
Debug.WriteLine("Name: " + doc.GetField("Name").StringValue + " Doc ID: " + scoreDoc.Doc.ToString)
Next
End Using
End Using
End Using