2014-09-30 55 views
0

我有一个多值插图字段,这些插页项可以有多项,例如 当我搜索“foo-45”时,只有最后一个导管“foo-456”应该是高亮度的,而不是字符串“foo-456” foo“将在所有三个文章中被高举。SOLR如何在多值字段中仅突出显示多项匹配项

我可以使用哪种荧光笔?如何配置荧光笔以突出显示所有查询字词匹配的匹配项?

这是我的领域的定义和类型:

<field name="cathegory_field" type="cathegory_field_type" indexed="true" stored="true" multiValued="true" /> 

<fieldType class="solr.TextField" name="cathegory_field_type"> 
    <analyzer type="index"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.WordDelimiterFilterFactory" preserveOriginal="1" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" catenateAll="1"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.WordDelimiterFilterFactory" splitOnCaseChange="0"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    </analyzer> 
</fieldType> 
+1

这可能是由于该领域的分析。你介意分享该领域的领域类型吗? – ameertawfik 2014-09-30 18:20:05

+0

感谢您的建议,我在字段 – MrLang 2014-10-01 08:01:18

回答

0

我只是想在我的机器,WordDelimiterFilterFactory创建两个令牌(foo和456)。

在我看来,你可以做的一件事是从查询分析中删除WordDelimiterFilterFactory

另一种解决方案是使用另一个字段来突出显示;在那里你不使用WordDelimiterFilterFactory。下面是一个简单的定义:

<fieldType class="solr.TextField" name="text_cat_hl"> 
<analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.WordDelimiterFilterFactory" preserveOriginal="1" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" catenateAll="1"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
<analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 

然后创建一个新的领域:

<field name="cat_hl" type="text_cat_hl" indexed="true" stored="true" multiValued="true" /> 

您需要category_field的内容复制到:

<copyField source="cathegory_field" dest="cat_hl"/> 

最后,你发出这样的查询:

http://127.0.0.1:8983/solr/collection1?select?q=cathegory_field:foo-456&hl.q=cathegory_hl:foo-456 
+0

上面添加了字段及其类型,但是当我搜索带下划线的“456 foo”或“foo_456”时,我什么都找不到。 也许只有在所有查询条件匹配时,才有可能仅保留多值字段的结果。 – MrLang 2014-10-02 12:56:02