我是 Lucene 新手,我正在尝试将文档的“标题”和“描述”字段与数据库中文档的相同字段进行比较。
步骤如下:
然后循环对数据库中的所有文档执行此操作,并返回相似度得分最高的文档。
查看 Lucene 的文档,我不认为这是使用 MultiFieldQuery 搜索时的情况。 MultiFieldQuery 会将给定文档的“标题”与数据库中文档的两个字段进行比较。这是正确的吗?
我是否还遗漏了任何其他表格来对每个字段进行比较?
提前致谢:D
经过一番研究,我发现“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,因此两个字段在比较中的权重相同)