Java Lucene查询(Term-/BooleanQuery)返回误报

Java Lucene查询(Term-/BooleanQuery)返回误报,java,lucene,Java,Lucene,我正在尝试做一些语言分析,并基于Lucene索引编写了一个小的“句子库”。它将文本拆分成句子并将它们(每个)存储在文档中 以下是我存储句子的方式: Document doc = new Document(); doc.add(new StringField("language", getLanguage(), Store.YES)); doc.add(new TextField("text", getLiteralValue(), Store.YES)); StringBuilder sb =

我正在尝试做一些语言分析,并基于Lucene索引编写了一个小的“句子库”。它将文本拆分成句子并将它们(每个)存储在文档中

以下是我存储句子的方式:

Document doc = new Document();
doc.add(new StringField("language", getLanguage(), Store.YES));
doc.add(new TextField("text", getLiteralValue(), Store.YES));

StringBuilder sb = new StringBuilder();

for (int i = 0; i < getTokens().size(); i++) {
    doc.add(new StringField("term_" + i, getTokens().get(i).getLiteralValue(), Store.YES));
    doc.add(new StringField("terms", getTokens().get(i).getLiteralValue(), Store.YES));
    doc.add(new StringField("pos_" + i, getTokens().get(i).getPoS(), Store.YES));

    sb.append(getTokens().get(i).getPoS()).append(" ");
}

doc.add(new IntField("length", getTokens().size(), Store.YES));
doc.add(new TextField("pos", sb.toString(), Store.YES));
将返回文本如下的文档:

审查和完成文件

文档<
已存储、已索引、已标记、已忽略规范、索引选项=仅存储、已索引、已标记的文档
存储、索引、标记化、省略规范、索引选项=仅文档存储、索引、标记化、省略规范、索引选项=仅文档
存储、索引、标记化、省略规范、索引选项=仅文档存储、索引、标记化、省略规范、索引选项=仅文档
存储、索引、标记化、省略规范、索引选项=仅文档存储、索引、标记化、省略规范、索引选项=仅文档
存储、索引、标记化、省略规范、索引选项=仅文档存储、索引、标记化、省略规范、索引选项=仅文档
存储、索引、标记化、省略规范、索引选项=仅文档存储、索引、标记化、省略规范、索引选项=仅文档
存储、索引、标记化、省略规范、索引选项=仅文档存储、索引、标记化、省略规范、索引选项=仅文档
存储、索引、标记化、省略规范、索引选项=仅文档存储、索引、标记化、省略规范、索引选项=仅文档
存储、索引、标记化、省略规范、索引选项=仅文档存储、索引、标记化、省略规范、索引选项=仅文档
存储、索引、标记化、省略规范、索引选项=仅文档存储、索引、标记化、省略规范、索引选项=仅文档
存储、索引、标记化、省略规范、索引选项=仅文档存储、索引、标记化、省略规范、索引选项=仅文档
存储、索引、标记化、省略规范、索引选项=文档\u仅存储、索引、标记化
>

“terms”的值与字符串“hiearchy”的值相差甚远,因此,该文档如何在搜索结果中弹出?

我建议您查看返回文档的内容,以便粘贴。检查此索引以前是否包含某些数据。无论如何,在不知道你的数据集和Lucene版本的情况下进行分析是非常困难的。他们都一样。所有返回的文档都不包含搜索的术语。此外,我还测试了lucene、3.6、4.10.2以及其中的几个版本。他们的行为都是一样的。@Michael,我不能复制你的问题。这个示例没有找到与“hierarchy”匹配的,1个与“JJ”匹配的:我怀疑您的问题出在您自己的代码中,而不是您自己的代码中Lucene@bcoughlan你说得对。图我的一个收集者使用索引搜索器获取文档,因此返回的不是它实际命中的文档,而是总体索引中或多或少的随机文档。
TermQuery tq = new TermQuery(new Term("terms", "hierarchy"));
Document<
stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<language:en> stored,indexed,tokenized<text:Review & completion of the document.>
stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<term_0:Review> stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<terms:Review>
stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<pos_0:NOUN> stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<term_1:&>
stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<terms:&> stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<pos_1:CONJ>
stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<term_2:completion> stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<terms:completion>
stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<pos_2:NOUN> stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<term_3:of>
stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<terms:of> stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<pos_3:ADP>
stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<term_4:the> stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<terms:the>
stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<pos_4:DET> stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<term_5:document>
stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<terms:document> stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<pos_5:NOUN>
stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<term_6:.> stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<terms:.>
stored,indexed,tokenized,omitNorms,indexOptions=DOCS_ONLY<pos_6:.> stored<length:7> stored,indexed,tokenized<pos:NOUN CONJ NOUN ADP DET NOUN . >

>