将 Lucene 搜索中与多个字段完全相同的字段进行比较

问题描述 投票:0回答:1

我是 Lucene 新手,我正在尝试将文档的“标题”和“描述”字段与数据库中文档的相同字段进行比较。

步骤如下:

  1. 将给定文档的“标题”字段与我的 DDBB 上文档的“标题”字段进行比较。
  2. 将给定文档的“描述”字段与我的 DDBB 上同一文档的“描述”字段进行比较。
  3. 结合两个分数来创建 DDBB 上给定文档的相似性分数。

然后循环对数据库中的所有文档执行此操作,并返回相似度得分最高的文档。

查看 Lucene 的文档,我不认为这是使用 MultiFieldQuery 搜索时的情况。 MultiFieldQuery 会将给定文档的“标题”与数据库中文档的两个字段进行比较。这是正确的吗?

我是否还遗漏了任何其他表格来对每个字段进行比较?

提前致谢:D

java lucene compare
1个回答
0
投票

经过一番研究,我发现“MultiFieldQueryParser”确实会逐个字段进行比较(wiki 可能与给定的示例有点令人困惑)。这样,如果您有 2 个名为“标题”和“描述”的字段,您可以创建如下查询:

//Let's assume you already have the documents in your directory and you have 
//your searcher and indexer already opened 
String[] fields = {"title", "description"};
String[] queries =  {document.getTitle(), document.getDescription()};
Map<String, Float> boosts = Map.of("title", 1.0f, "description", 1.0f); //optional
MultiFieldQueryParser parser = new MultiFieldQueryParser(fields, analyzer,boosts);
try {
     Query query = parser.parse(queries,fields,analyzer);
     .
     .
     .

这样,查询将单独比较字段的值,然后使用给定的提升因子计算相似度(在本例中为 1:1,因此两个字段在比较中的权重相同)

© www.soinside.com 2019 - 2024. All rights reserved.