4

为什么通配符查询“dog#V*”无法检索到包含“dog#VVP”的文档?

以下用 Jython 为 Lucene 3.0.0 编写的代码无法检索索引文档。我错过了什么吗?

analyzer = WhitespaceAnalyzer()  
directory = FSDirectory.open(java.io.File("testindex"))  
iwriter = IndexWriter(directory, analyzer, True, IndexWriter.MaxFieldLength(25000))  

doc = Document()  
doc.add(Field("sentence", "dog#VVP", Field.Store.YES, Field.Index.ANALYZED))  
iwriter.addDocument(doc)  
iwriter.close()  
directory.close()  

parser = QueryParser(Version.LUCENE_CURRENT, "sentence", analyzer)  
directory = FSDirectory.open(java.io.File("testindex"))  
isearcher = IndexSearcher(directory, True) # read-only=true  

query = parser.parse("dog#V*")  
hits = isearcher.search(query, None, 10).scoreDocs  
print query_text + ":" + ", ".join([str(x) for x in list(hits)])  

输出是:

dog#V*: 

它不返回任何东西。我看到 dog#VV* 或使用除“#”以外的分隔符的相同行为(我尝试了“__”和“aaa”)。有趣的是,以下查询有效:dog#???、dog#*。

4

1 回答 1

3

如果你仔细查看结果

parser.parse("dog#V*")

你会看到的

sentence:dog#v*

注意小写的 v! 为了避免通配符查询中术语的自动小写,您必须这样做

parser.setLowercaseExpandedTerms(False)

在解析查询字符串之前。我不知道为什么默认是小写的。

于 2010-01-18T02:35:51.797 回答