java - 将精确匹配排名为最高的最佳 lucene 设置是什么

标签 java lucene analyzer

当我希望完全匹配的排名高于“部分”匹配时,应使用哪些分析器进行索引和搜索?是否可以在 Similarity 类中设置自定义评分?

例如,当我的索引由 car partscarcar shop 组成时(用 StandardAnalyzer 索引) > 在 lucene 3.5 上),对 "car" 的查询结果为:

  • 汽车零件
  • 汽车
  • 汽车店

(基本上按照添加的顺序返回,因为它们都得到相同的分数)。

我希望看到的是 car 排在第一位,然后是其他结果(哪个顺序并不重要,我假设分析器会影响它)。

最佳答案

所有三个匹配项都是完全(匹配的术语是汽车,而不是“ca”或“ar”):)

如果这些字段(“car parts”、“car”和“car shop”)中没有更多内容,则可以使用 lengthNorm()computeNorm()(取决于 Lucene 版本),给较短的字段更多的权重,以便汽车因更短而获得更高的分数。在 Lucene 3.3.0 中,DefaultSimilarity.computeNorm() 看起来像这样:

return state.getBoost() * ((float) (1.0 / Math.sqrt(numTerms)));

其中 numTerms 是该字段中的术语总数。所以令人惊讶的是,“car”和“car shop”文档具有相同的分数,因为“car”的范数是 1,而“car shop”应该是 0.7(假设 boost 为 1)。

关于java - 将精确匹配排名为最高的最佳 lucene 设置是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8786343/

相关文章:

postgresql - 我怎么知道 Postgres 表的统计信息是否是最新的?

java - 如何添加 MBean 方法的描述以在 JBOSS 的 jmx-console 中查看它

java - 使用 ow3c.dom.Document 对象解析文档时出现解析错误(Unicode : 0x1a) was found in the element content of the document

java - Elasticsearch 中的通配符搜索

java - lucene:将查询存储在磁盘上/保留查询

mysql - 使用 Mysql 数据库的 Solr 搜索,任何用于数据导入的实用程序

ios - 单例设计潜在泄漏

java - 用于 UDP NAT 打洞的 PHP 和 Java ...?

java - 如何解决java中的com.sun.mail.smtp.SMTPSendFailedException?

python - 如何将 sklearn CountVectorizer 与 'word' 和 'char' 分析器一起使用? - Python