【问题标题】:SOLR Query works not properly with field starts withSOLR 查询在字段开头时无法正常工作
【发布时间】:2013-08-24 21:58:23
【问题描述】:

我是 Solr 的新手,我开发了一个分组搜索,它应该按 object_class 对搜索结果进行分组(每个数据库表都有一个像 User、Artist 等对象)。

现在我正在尝试构建一个搜索,它应该在标题、副标题、内容和传记等字段中进行搜索。

对于每个对象,我都有不同的搜索查询(因为使用 solr 在分组结果时您无法实现不同的排序顺序)。

问题:有一个艺术家的标题是“Cuebrick”。现在通常在搜索 Cueb 甚至标题:Cueb* 时应该会找到它,但这不起作用。

就像在屏幕截图中一样,您可以看到我正在搜索 Cueb、headline:cueb* 和 header:cuebrick 以及 object_class:Artist ( ... AND ... )。

为什么我的“喜欢”查询不起作用?

查询:cueb AND object_class:Artist

查询:headline:cueb* AND object_class:Artist

查询:headline:cuebrick AND object_class:Artist

我的架构的重要部分如下所示:

<field name="headline" type="text_de" indexed="true" stored="true" stripHTML="true" />
(... same for content, subtitle and biography)


<defaultSearchField>text</defaultSearchField>

<copyField source="headline" dest="text"/>
<copyField source="content" dest="text"/>
<copyField source="keywords" dest="text"/>
<copyField source="subtitle" dest="text"/>
<copyField source="biography" dest="text"/>

这里是我的 text_de 定义(现在更改了,我必须重新索引吗?重启没有改变任何东西):

<fieldType name="text_de" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_de.txt" enablePositionIncrements="true" />
    <filter class="solr.WordDelimiterFilterFactory" splitOnCaseChange="1" splitOnNumerics="1" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
    <filter class="solr.SnowballPorterFilterFactory" language="German2" />
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.StandardTokenizerFactory"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords_de.txt" enablePositionIncrements="true" />
    <filter class="solr.WordDelimiterFilterFactory" splitOnCaseChange="1" splitOnNumerics="1" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" />
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
    <filter class="solr.SnowballPorterFilterFactory" language="German2" />
  </analyzer>
</fieldType>

【问题讨论】:

  • 你能分享字段类型“text_de”的详细信息吗?在查询和索引时应用了哪些分析器???
  • @mgs done :) 查看编辑
  • @mgs 现已更新为架构(见上文)

标签: java php search solr


【解决方案1】:

由于过滤器 class="solr.SnowballPorterFilterFactory" language="German2强>”。

您的查询headline:cueb* 是通配符查询。 通配符查询不会对您作为查询提供的文本执行任何分析。因此它将搜索带有前缀“cueb”的令牌,并且找不到任何匹配项,因为您的索引令牌是“cubrick”。

将您的查询更改为 headline:cub* 并检查结果。

【讨论】:

  • headline:cub* 工作正常……你说得对。所以删除雪球搬运工过滤器应该可以解决索引问题?
  • 是的。如果您觉得对您有帮助,请投票给答案.. :)
  • 仅应用标准标记器并删除其他分析器。每个单词都将按原样存储...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-15
  • 2013-06-06
  • 1970-01-01
相关资源
最近更新 更多