如何搜索人名的不同拼写

时间:2013-09-13 10:56:54

标签: search solr

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

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

拼写可以是: ALBERTO JORGE ALONSO CALEFACCION

ALBERTO J. ALONSO CALEFACCION

ALBERTO J ALONSO CALEFACCION

ALBERTO ALONSO CALEFACCION

和 ALONSO CALEFACCION ALBERTO JORGE

ALONSO CALEFACCION ALBERTO J。

ALONSO CALEFACCION ALBERTO J

ALONSO CALEFACCION ALBERTO

我只能使用“ALONSO CALEFACCION”〜0来搜索姓氏,并且回答正确。

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

搜索更复杂,因为西班牙语名称可以包含额外的单词,如“y”和“de”,而不需要这些单词(在我们的例子中)。 所以数据库中的名字可能是这样的:ALBERTO JORGE ALONSO Y CALEFACCION

感谢您的帮助。

我使用Solr 3.6

1 个答案:

答案 0 :(得分: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>

您可以阅读更多here

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

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

您可以自动生成同义词自动SearchComponent