我有一个带有人名的文件,我想根据部分名称返回这些文件,例如:
查询:“Joseph Gar *”
应该返回
Joseph Garret
Joseph Garnier
如何使用solr进行查询?
我试过了:
q=complete_name:"Joseph Gar*"
q=complete_name:"Joseph Gar"~5
q=complete_name:(Joseph AND Gar)
答案 0 :(得分:0)
您可以尝试以下查询: -
q = complete_name:Joseph Gar *
然后对Joseph和Gar按指定顺序匹配的那些短语进行推动。请注意,上述内容也会产生名称如“Garret Joseph”的结果。但是,由于提升,这些结果将被推倒。
但是,如果您只喜欢符合上述顺序的结果,那么我建议您查看以下链接: -
https://issues.apache.org/jira/browse/SOLR-1604
以上讨论了短语中的通配符。
注意: - 当我使用上面的jar文件时,有时候,我得到一个超出的最大布尔子句数(可以在solrconfig.xml中增加。但是,它仍然有可能不够)
答案 1 :(得分:0)
在schema.xml中尝试使用以下字段类型(complete_name),
<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*
要处理字母和数字以外的特殊字符,请在每个字符前使用转义字符\ on。示例:要搜索包含$的文本,请输入q = * \ $ *
希望这个答案可以解决您的问题。