我有一个我认为是简单的solr练习,但我不确定要使用什么。
我有一堆名字,例如Joe Smith、Jack Daniels和Steve。每个名称都可以是一个或两个名称。我希望能够搜索此s.t.如果你搜索"Danie“,你会得到名字或姓氏都以"Danie”开头的所有东西。三个返回示例是"Danielle“、"Steven Daniels”和"Danier Daniellson“。
我也喜欢它,以便优先考虑名字。
那么有两个问题是,我是否需要使用copyField并将名字分解为名字和姓氏?我的分析器会是什么样子呢?
编辑:对搜索能力进行两次编辑。1.类似"Joe S“的内容应该返回所有看起来像"Joe S*”的用户。2.如果用户使用"&“字符进行搜索,则应该将其包括在搜索中,而不是用作运算符。
发布于 2011-09-16 16:22:14
为了解决第一部分的问题,我建议使用以下解决方案:
为字段编制两次索引:
一次使用solr.KeywordTokenizerFactory的
的
您可以在此处找到有关这些标记器的更多信息:http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters
在使用不同的标记器在两个筛选器中为它们编制索引后,只需使用boost query从一个字段(名字优先的字段)提升结果,如下所述:http://wiki.apache.org/solr/SolrRelevancyFAQ#How_can_I_make_.22superman.22_in_the_title_field_score_higher_than_in_the_subject_field
如果用户使用"&“字符进行搜索,则该字符应包含在搜索中,而不是用作运算符。
对于这一部分,您可以使用DisMax查询http://wiki.apache.org/solr/DisMaxQParserPlugin,或者当您发出请求时,使用"&“而不是&,您还需要使用像WhiteSpaceDelimiter这样的标记器来只保留令牌中的其他字符。
https://stackoverflow.com/questions/7436825
复制相似问题