【问题标题】:Solr Tokenizer QuestionSolr 分词器问题
【发布时间】:2011-09-15 20:04:13
【问题描述】:

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

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

我也希望优先考虑名字。

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

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

【问题讨论】:

    标签: solr tokenize


    【解决方案1】:

    为了解决您的第一部分,我建议以下解决方案:

    索引您的字段两次:

    • 使用一次 solr.KeywordTokenizerFactory - 它将按原样索引您的整个字段。它不会被拆分为令牌。这对于通过优先考虑名字来提升结果很有用。
    • 使用一次 WordDelimiterTokenizerFactoryStandardTokenizerFactory

    您可以在此处找到有关这些标记器的更多信息: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 或在发出请求时使用“&”代替 & 您还需要使用像 WhiteSpaceDelimiter 这样的标记器来将其他字符保留在标记中。

    【讨论】:

    • 感谢您的评论。我还没有得到第一部分的建议来完全工作。关于第二部分,您将如何使用 dismax 来执行此操作?我发现通过调整查询并将“&”的实例替换为“%26”,edismax 识别它没有问题。这和你说的不一样吗?谢谢。
    • dismax 的不同之处在于它不会将 & 视为特殊字符,这意味着您可以执行包含 '&' 字符的查询,并且不会将其视为特殊字符.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多