我想在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
答案 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
。