【问题标题】:Solr web interface query with hyphen带有连字符的 Solr Web 界面查询
【发布时间】:2013-09-01 11:13:33
【问题描述】:

我有一个由 haystack 创建的架构,用于在 Solr 4.3 中索引书籍和作者 执行搜索时,除了包含连字符的搜索词外,一切正常。

我知道您必须使用反斜杠转义它们,但即使使用 solr Web 界面,我也无法找到正确的文档。

如下图所示,使用full_name:(ukiyo)可以找到一位名叫Ukiyo-E的作者。当输入 full_name:(ukiyo-e)full_name:(ukiyo-e) 时,我什么也找不到。

编辑

架构信息:

<fieldType name="edge_ngram" class="solr.TextField" positionIncrementGap="1">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory" />
    <filter class="solr.LowerCaseFilterFactory" />
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front" />
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory" />
    <filter class="solr.LowerCaseFilterFactory" />
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/>
  </analyzer>
</fieldType>
...
<field name="full_name" type="edge_ngram" indexed="true" stored="true" multiValued="false" />

分析仪结果:

【问题讨论】:

    标签: solr django-haystack solr4


    【解决方案1】:

    使用“分析”菜单分别分析您的术语以进行索引和查询。具体来说,您应该在索引和查询期间有类似的文本处理例程(请参阅架构中​​的 full_name 字段)。如果您不将查询“ukiyo-e”标记为 2 个术语 ukiyoe,但在索引期间对其进行标记,您将无法找到完整的术语 ukiyo-e

    【讨论】:

    • 嗨,tx 的响应,但是......我对 solr 缺乏了解......我用分析器结果和字段的架构定义编辑我的帖子。
    • EdgeNGramFilterFactory 中设置minGramSize="2",在用WordDelimiterFilterFactory 标记“ukiyo-e”后,您有2 个标记“ukiyo”和“e”。第二个标记只有 1 个字符,但您要求标记至少为 2 个字符。
    • 我想,您的架构中有&lt;solrQueryParser defaultOperator="AND" /&gt;,这需要索引中存在的所有查询词。由于您的索引没有术语e,因此您找不到此文档,根据您的架构,该文档具有术语ukukiukiyukiyo
    • 您好,非常感谢您的回答,我将 MinGram 降低到 1,将运算符降低到 OR,现在条款出现了。考虑设置一个本地 solr 实例来使用设置并分析结果,我发现 MinGramSize 为 1 会创建一个更大的索引...
    • 您可以从分析中删除拆分器&lt;filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/&gt; 并将minGramSize="2" 设置回。这取决于您希望如何处理 1 个字符的“单词”。
    猜你喜欢
    • 1970-01-01
    • 2012-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 2013-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多