我是Solr的新手,我开发了一个分组搜索,它应该按object_class对搜索结果进行分组(每个数据库表都有一个像User,Artist,...这样的对象。)
现在我正在尝试建立一个搜索,它应该搜索标题,副标题,内容和传记等字段。
对于每个对象,我有一个不同的搜索查询(因为使用solr,您在分组结果时无法实现不同的排序顺序)。
问题:有一位艺术家标题为“Cuebrick”。现在通常在搜索Cueb甚至标题时都会找到它:Cueb *但是这不起作用。
在屏幕截图中,您可以看到我正在搜索Cueb,标题:cueb *和标题:cuebrick with 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>
答案 0 :(得分:2)
由于过滤器 class =“solr.SnowballPorterFilterFactory”language =“German2
STRONG>”。您的查询标题:cueb *是一个通配符查询。
通配符查询不会对您作为查询提供的文本执行任何分析。因此,它将搜索带有前缀“cueb”的令牌,并且无法找到任何匹配,因为您的索引令牌是“ cubrick ”。
将您的查询更改为标题:幼崽 *并检查结果。