Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lucene 了解为什么带有BooleanQuery的TermRangeQuery没有返回值_Lucene_Lucene.net - Fatal编程技术网

Lucene 了解为什么带有BooleanQuery的TermRangeQuery没有返回值

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

我试图对搜索结果应用过滤器,我可以成功应用“精确匹配”过滤,但我试图理解为什么我试图对字符串字段使用TermRangeQuery,但我没有得到任何结果。e、 g.给定此索引(我在下面的示例中使用布尔查询,因为我最终希望应用一组过滤器)

我可以查询苹果的确切匹配项

    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