有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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~";

但这会导致程序搜索包含类似于jodiefoster的单词的短语,而我真正需要的是找到一个类似于jodie foster短语的短语,而不是逐字逐句

我的最后一个问题是:如何在忽略包含该短语的长句的情况下,对一个n字短语进行模糊搜索并找到类似的匹配项


共 (0) 个答案