【发布时间】:2014-05-13 02:08:32
【问题描述】:
我需要创建人名搜索。我已经在here 中看到了精彩的内容,但我需要一些不同的东西。
这是我的要求。
我尝试使用拼音搜索,但我需要索引的人名不是英文名字。我相信 Apache Solr / Lucene 实现的语音算法不适用于葡萄牙语单词(我的文化)。
在那之后,我决定使用 ngrams 进行搜索。它似乎有效,但我需要以某种方式比较用户键入的内容与 Solr 索引的接近程度。我不能使用分数,因为它使用某个单词在所有文档中存在的次数。所以我需要以某种方式给出一个数字(例如百分比)作为比较的结果,换句话说,用户输入的内容与我在 solr 上的真实姓名有多接近。
Ps:我将在我的应用程序中使用此结果来使用用户键入的内容或继续使用我 Solr 上存在的内容。
示例:
ID NAME
1 James Bond
2 James Bond Junior
3 Tony Mellord
用户可以搜索 Jhames Bond 并使用 Ngrams 1 和 2 将匹配。
PS:我用英文名字只是为了说明情况。
有什么方法可以给出答案:用户输入的内容与我在不使用分数的情况下索引的内容有多少相似之处?比方说:
Jhames Bond looks like James Bond in 97% (for example)
Jhames Bond looks like James Bond Junior in 87%
【问题讨论】:
-
我想知道,您在那篇文章中有几个问题,对吧?一是关于您能否获得相似性百分比,二是关于您的现场方法。对吗?
-
@Mysterion 是的。但主要问题是关于百分比。
-
我所能做的就是向你推荐这篇文章 - wiki.apache.org/lucene-java/ScoresAsPercentages,不确定这是否是你要找的
-
@Mysterion 我不确定这是否是我要找的。我需要以某种方式 Solr / Lucene 让我知道用户输入的内容与我索引的内容有多接近。正如我所说,无法使用分数,因为他的公式会根据我正在搜索的某些单词存在多少文档而有所不同。基本上我需要一个像 dismax 或 ngram 这样的算法的输出,但有些东西。 IE。百分比
-
哦,我终于得到了你想要的东西。用它来更新您的问题可能是个好主意
标签: search solr lucene fuzzy-search dismax