【问题标题】:Any phrase indexing capability in solrsolr 中的任何短语索引功能
【发布时间】:2013-03-25 03:04:11
【问题描述】:

Solr 中是否有一个标记器/过滤器可以将一些短语(我猜是文件的形式)索引为单个标记?此外,任何关于将其放在分析器链中的位置的建议都会很棒。

【问题讨论】:

    标签: solr


    【解决方案1】:

    SynonymFilterFactory 应该对您有所帮助。以下是该页面中的示例:

    #Explicit mappings match any token sequence on the LHS of "=>"
    #and replace with all alternatives on the RHS.  These types of mappings
    #ignore the expand parameter in the schema.
    #Examples:
    i-pod, i pod => ipod
    sea biscuit, sea biscit => seabiscuit
    

    在索引时,左侧的短语被右侧的单个标记替换。将您的映射存储在一个名为 syn.txt 的文件中,您可以拥有如下分析器链(再次来自 solr wiki 链接):

    <fieldtype name="syn" class="solr.TextField">
          <analyzer>
              <tokenizer class="solr.WhitespaceTokenizerFactory"/>
              <filter class="solr.SynonymFilterFactory" synonyms="syn.txt" 
                      ignoreCase="true" expand="false"/>
          </analyzer>
    </fieldtype>
    

    【讨论】:

    • 谢谢,但同义词并不是我想要的。例如,我想将“new york”作为一个单词进行索引,这样“new”或“york”就不会匹配。
    • 如果您将 new york =&gt; newyork 保留在 syn.txt 中并且不将其拆分以在索引时间分析器链中进一步创建任何令牌,则搜索 newyork不会匹配。但是,要匹配包含new york 的文档,用户必须发出短语查询“new york”,并且您也应该在查询时使用同义词过滤器。并且返回的文档将包含newyork 没有空格。顺便说一句,我在 google 中搜索了new,它在前 10 名中给出了new york times,所以它毕竟不是太糟糕了吗? :-)
    • 我试过这个。我的发现是 Solr 似乎仍然分别索引“new”和“york”?我尝试了 expand=true 和 expand=false,没有变化?任何见解出了什么问题?
    • 如果您使用分析工具,则它会突出显示匹配项,但如果您实际索引文档并在字段中搜索“新”或“约克”,则不匹配。跨度>
    • 好的。让我试试干净的环境。我正在使用 SOLR 4.1,我之前的评论不是很具体:我发现“newyork”和 new & york 一样被索引。如果我测试“tiger => lion”,那么只有狮子被索引并且老虎消失了,所以我想知道这是否与 SFF 中的短语处理有关。无论如何我会再次测试。
    【解决方案2】:

    您需要为此使用TokenizerFactory

    如果你也想检测句子,那么你可以查看 solr.UAX29URLEmailTokenizerFactory。

    如果输入是特定模式,您可以使用 solr.PatternTokenizerFactory。

    如果您想将整个输入索引为一个字段,您可以使用 solr.KeywordTokenizerFactory。

    【讨论】:

      猜你喜欢
      • 2012-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多