Solr Tokenizer问题

时间:2011-09-15 20:04:14

标签: solr tokenize

我认为这是一个简单的solr练习,但我不确定该使用什么。

我有一个名字字段,例如乔史密斯和杰克丹尼尔斯和史蒂夫。它们每个都可以是一个名字或两个名字。我想能够搜索这个s.t.如果您搜索“Danie”,您将获得以“Danie”开头的名字或姓氏的所有内容。三个示例回报将是“Danielle”,“Steven Daniels”和“Danier Daniellson”。

我也希望这样,首选名称。

所以有两个问题我需要使用copyField并将名字分解为名字和姓氏吗?我的分析仪会是什么样的?

编辑:对搜索能力进行两次编辑。 1.像“Joe S”这样的东西应该返回所有看起来像“Joe S *”的用户 2.如果用户搜索“&”字符,应包含在搜索中,不用作运算符。

1 个答案:

答案 0 :(得分:4)

要解决您的第一部分,我建议采用以下解决方案:

将您的字段编入索引两次:

  • 一次使用 solr.KeywordTokenizerFactory - 将按原样索引整个字段。它不会被分成令牌。这对于通过优先考虑名字来提高结果非常有用。
  • 一次使用 WordDelimiterTokenizerFactory StandardTokenizerFactory

您可以在此处找到有关这些标记生成器的更多信息:http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters

在使用不同的标记器在两个过滤器中对它们编制索引之后,您只需使用提升查询来从一个字段(优先级为第一个字段的字段)中提升结果,如下所述: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,也可以在提出请求时使用“& amp;”而不是& 此外,您还需要使用像WhiteSpaceDelimiter这样的标记器来将其他字符保留在标记中。