SOLR查询无法正常启动字段

时间:2013-08-22 09:02:13

标签: java php search solr

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

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

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

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

在屏幕截图中,您可以看到我正在搜索Cueb,标题:cueb *和标题:cuebrick with object_class:Artist(... AND ...)。

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

查询:cueb AND object_class:Artist

query1 not working

查询:headline:cueb* AND object_class:Artist

query2 not working

查询:headline:cuebrick AND object_class:Artist

query3 the right result

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

<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>

1 个答案:

答案 0 :(得分:2)

由于过滤器 class =“solr.SnowballPorterFilterFactory”language =“German2

STRONG>”。

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

将您的查询更改为标题:幼崽 *并检查结果。