Java SOLR查询不能正确处理以开头的字段

Java SOLR查询不能正确处理以开头的字段,java,php,search,solr,Java,Php,Search,Solr,我是Solr的新手,我开发了一个分组搜索,它应该按对象类对搜索结果进行分组(每个数据库表都有一个像用户、艺术家等对象) 现在我正在尝试建立一个搜索引擎,它应该在标题、副标题、内容和传记等领域进行搜索 对于每个对象,我有一个不同的搜索查询(因为使用solr,在对结果进行分组时,您无法实现不同的排序顺序) 问题是:有一位艺术家的标题是“Cuebrick”。现在,通常在搜索Cueb或者甚至是headline:Cueb*时都会找到,但这不起作用 就像在截图中一样,你可以看到我正在搜索Cueb,标题:Cu

我是Solr的新手,我开发了一个分组搜索,它应该按对象类对搜索结果进行分组(每个数据库表都有一个像用户、艺术家等对象)

现在我正在尝试建立一个搜索引擎,它应该在标题、副标题、内容和传记等领域进行搜索

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

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

就像在截图中一样,你可以看到我正在搜索Cueb,标题:Cueb*和标题:cuebrick with object_class:Artist(…和…)

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

查询:
cueb和object\u类:艺术家

查询:
headline:cueb*和object\u class:Artist

查询:
headline:cuebrick和object\u 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"/>

(…内容、字幕和传记相同)
文本
这里是我的文本定义(现在已更改,是否需要重新索引?重新启动未更改任何内容):


标记“cuebrick”将作为“cubrick”存储在您的索引中,原因是筛选class=“solr.SnowballPorterFilterFactory”language=“German2

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

将查询更改为headline:cub*并检查结果。
标记“cuebrick”将作为“cubrick”存储在索引中,原因是筛选class=“solr.SnowballPorterFilterFactory”language=“German2

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


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

能否共享字段类型“text\u de”的详细信息。在查询和索引时应用了哪些分析器???@mgs done:)请参阅edit@mgs现在更新到模式(见上文)您可以共享字段类型“text_de”的详细信息吗。在查询和索引时应用了哪些分析器???@mgs done:)请参阅edit@mgs立即更新到模式(见上文)标题:cub*工作正常。。你说得对。那么,移除snowball porter过滤器应该可以解决索引问题?是的。如果您觉得答案对您有帮助,请向上投票:)仅应用标准标记器并移除其他分析仪。每个单词都将按原样存储…标题:cub*工作正常。。你说得对。那么,移除snowball porter过滤器应该可以解决索引问题?是的。如果您觉得答案对您有帮助,请向上投票:)仅应用标准标记器并移除其他分析仪。每个单词都将按原样存储。。。
<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>