Lucene:查询时获得相同的长度结果

时间:2016-10-10 11:24:17

标签: java sql eclipse lucene

所以我在lucene中尝试了所有的查询类型,但它们似乎都没有用。我想要做的很简单:我想查询索引,但我希望得到完全相同的匹配。当我说完全相同时,我的意思是结果应该具有相同的文本(显然)和相同的长度,这在查询时通常会发生一个数据库。例如,当我正在搜索 jodie foster 时,我将此文本作为结果之一: Jodie Foster收到的奖项和提名列表。我不希望结果包含搜索字词,我希望结果与搜索字词完全相同。

首先,这就是我构建lucene索引的方式:

IndexWriterConfig luceneConfig = new IndexWriterConfig(new StandardAnalyzer());

Path path = Paths.get("C:/Users/i_l_g/Desktop/DBpedia/qls_labels");
Directory dir = FSDirectory.open(path);
IndexWriter writer = new IndexWriter(dir, luceneConfig);
while (rs.next()) {
        Document doc = new Document();

        doc.add(new Field("entity", rs.getString("entity"), TextField.TYPE_STORED));
        doc.add(new Field("label", rs.getString("label"), TextField.TYPE_STORED));
        writer.addDocument(doc);

        }

rs 是一个ResultSet类型变量,我显然只是从表中提取数据并使用Lucene索引它们。

接下来,我尝试使用所有类型的查询来查询此索引,但每次都得到相同的结果集,这几乎就像我甚至没有更改查询类型一样。我的最后一次尝试是使用 PhraseQuery

StandardAnalyzer analyzer = new StandardAnalyzer();

PhraseQuery.Builder builder = new PhraseQuery.Builder();
PhraseQuery q;
builder.add(new Term("label","jodie"));
builder.add(new Term("label","foster"));
builder.setSlop(0);
q=builder.build();

这是我每次都会得到的结果,如果有任何帮助的话:

找到5次点击。
1.朱迪福斯特 2. Alicia Christian“Jodie”Foster
3.朱迪福斯特摄影作品 4.给朱迪福斯特留下深刻印象 5. Jodie Foster收到的奖项和提名名单

我真的不认为这会花费我那么多时间,我已经尝试解决这个问题2天了,我已经访问了数十个链接,似乎没有人曾经有过这个问题。请帮忙。

0 个答案:

没有答案