0

我想在 Solr 数据库中搜索全名。数据库中的文档来自不同的来源,因此文档中名称的拼写不一致。拼写可以是 firstname lastname 或 lastname firstname。也可以有一个或多个名字和一个或多个姓氏。

所以如果一个名字是: 名字: ALBERTO JORGE 姓氏: ALONSO CALEFACCION

拼写可以是:ALBERTO JORGE ALONSO CALEFACCION

阿尔贝托·J·阿隆索·卡利法西翁

阿尔贝托·J·阿隆索

阿尔贝托·阿隆索

和阿隆索·卡利法西翁·阿尔贝托·豪尔赫

阿隆索 CALEFACCION ALBERTO J.

阿隆索·卡利法西翁·阿尔贝托·J

阿隆索·卡利法西翁·阿尔贝托

我只能使用“ALONSO CALEFACCION”~0 搜索姓氏,并得到正确的响应。

但是如何在一场比赛中搜索所有不同的拼写?搜索将由基于用户输入的程序创建。

搜索更加复杂,因为西班牙名称可以包含额外的词,如“y”和“de”,而这些词是必需的(在我们的例子中)。因此数据库中的名称可能类似于:ALBERTO JORGE ALONSO Y CALEFACCION

谢谢你的帮助。

我使用 Solr 3.6

4

1 回答 1

0

如果您在字段中保存了名字firstname和姓氏,lastname则可以使用某种编程语言准备查询。例如,如果用户输入了 2 个单词,您可以查询firstname:(word1) AND lastname:(word2) OR firstname:(word2) AND lastname:(word1).

您甚至可以为这些字段创建特殊类型以查找初始形式和收缩形式:

<fieldType name="AuthorsPrefix" class="solr.TextField"  positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory" />
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="200" side="front"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory" />
  </analyzer>
</fieldType>

你可以在这里阅读更多。

另一种方法是在索引期间生成所有可能的组合并在此组合字段中搜索作者:

ALBERTO JORGE ALONSO CALEFACCION
ALBERTO J ALONSO CALEFACCION
ALBERTO ALONSO CALEFACCION
ALONSO CALEFACCION ALBERTO JORGE
ALONSO CALEFACCION ALBERTO J
ALONSO CALEFACCION ALBERTO

您可以自动生成同义词,制作自己的SearchComponent.

于 2013-09-13T13:02:35.830 回答