【发布时间】:2016-12-11 20:39:25
【问题描述】:
我正在尝试解决最近邻搜索问题。 这是我的代码:
// Indexing
val analyzer = new StandardAnalyzer()
val directory = new RAMDirectory()
val config = new IndexWriterConfig(analyzer)
val iwriter = new IndexWriter(directory, config)
val queryField = "fieldname"
stringData.foreach { str =>
val doc = new Document()
doc.add(new TextField(queryField, str, Field.Store.YES))
iwriter.addDocument(doc)
}
iwriter.close()
// Searching
val ireader = DirectoryReader.open(directory)
val isearcher = new IndexSearcher(ireader)
val parser = new QueryParser(queryField, analyzer)
val query = parser.parse("Some text for testing")
val hits = isearcher.search(query, 10).scoreDocs
当我查看值命中时,我看到的分数超过 1。
据我所知,lucene打分公式是:
score(q,d) = coord-factor(q,d) · query-boost(q) · cosSim(q,d) · doc-len-norm(d) · doc-boost(d)
但我只想获得查询和文档之间范围 [0,1] 的余弦相似度,而不是坐标因子、doc-len-norm 等。 有什么可能的方法来实现它?
【问题讨论】:
-
需要注意的一点:相似度公式不再是默认值。从 6.0 开始,Lucene 默认使用BM25 实现。旧的默认设置仍然可用,请参阅ClassicSimilarity
标签: elasticsearch solr lucene full-text-search text-mining