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