所以我在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天了,我已经访问了数十个链接,似乎没有人曾经有过这个问题。请帮忙。