java Lucene:多词短语的模糊搜索
当我试图通过Lucene搜索一个多词短语时,我面临多个问题
首先,我是这样索引数据的:
IndexWriterConfig luceneConfig = new IndexWriterConfig(new StandardAnalyzer());
Path path = Paths.get("C:/Users/i_l_g/Desktop/DBpedia/qls_labels-textfield");
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);
}
正如您可能知道的,我只是从数据库中提取行并为它们编制索引
现在,我试图搜索与我的查询类似的双词短语,但问题是,我得到了各种各样的句子。下面是我用来搜索短语的代码:
StandardAnalyzer analyzer = new StandardAnalyzer();
String query = "jodie foster";
QueryParser parser = new QueryParser("label", analyzer);
parser.setDefaultOperator(QueryParser.Operator.AND);
Query q = parser.parse(query);
这里的问题是,我得到了朱迪·福斯特获得的奖项和提名列表。这意味着包含搜索短语的句子也会被返回
我还试图获得类似于我搜索的短语。我在网上发现我需要执行模糊搜索,为此我必须在查询中附加~符号。它只处理单个单词,但在上面的查询中使用它会给我带来问题。我试过类似的方法
String query = "\"jodie foster\"~";
我将最小相似性设置为0.1,以确保它正常工作
parser.setFuzzyMinSim(0.1f);
但我得到的结果与我第一次尝试得到的结果完全相同(没有模糊搜索)
我还尝试在每个单词前面添加~:
String query = "jodie~ foster~";
但这会导致程序搜索包含类似于jodie和foster的单词的短语,而我真正需要的是找到一个类似于jodie foster短语的短语,而不是逐字逐句
我的最后一个问题是:如何在忽略包含该短语的长句的情况下,对一个n字短语进行模糊搜索并找到类似的匹配项
共 (0) 个答案