0

I have a document with persons name and I would like to return those document based on partial names, for example:

Querying: "Joseph Gar*"

Should return

Joseph Garret
Joseph Garnier

How to make that query using solr?

I have tried:

q=complete_name:"Joseph Gar*"
q=complete_name:"Joseph Gar"~5
q=complete_name:(Joseph AND Gar)
4

2 回答 2

0

您可以尝试以下查询:-

q=complete_name:约瑟夫·加尔*

然后对 Joseph 和 Gar 按指定顺序匹配的那些短语进行提升。请注意,上述内容也会产生名称类似于“Garret Joseph”的结果。但是,由于提振,这样的结果将被向下推。

但是,如果您只喜欢与上述顺序匹配的结果,那么我建议您查看以下链接:-

https://issues.apache.org/jira/browse/SOLR-1604

上面在短语中讨论了通配符。

注意:- 当我使用上述 jar 文件时,有时会超出最大布尔子句计数(可以在 solrconfig.xml 中增加。但是,它仍有可能不够用)。

于 2012-12-18T03:58:10.887 回答
0

尝试在 schema.xml 中为您的字段(完整名称)使用以下字段类型,

<fieldType name="text_search" class="solr.TextField" sortMissingLast="true" omitNorms="true">
    <analyzer>
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <filter class="solr.LowerCaseFilterFactory" />  
    </analyzer>   
</fieldType>

并且您在 schema.xml 中的字段定义就像

<field name="complete_name" type="text_search" indexed="true" stored="true"/>

并使用类似的查询进行搜索

q=complete_name:*Joseph\ Gar*

要处理字母和数字以外的特殊字符,请在每个字符前使用转义字符 \。示例:要搜索包含 $ 的文本,请给出 q=*\$*

希望这个答案可以解决您的问题。

于 2012-12-18T08:49:30.130 回答