A 我需要执行短语搜索。在搜索结果中,我得到了完全匹配的短语,但查看突出显示的部分,我发现该短语被标记化,即这就是我搜索“第 1 天”短语时得到的结果:
<arr name="post">
<str><em>Day</em> <em>1</em> We have begun a new adventure! An early morning (4:30 a.m.) has found me meeting with</str>
</arr>
这就是我希望收到的结果:
<arr name="post">
<str><em>Day 1</em> We have begun a new adventure! An early morning (4:30 a.m.) has found me meeting with</str>
</arr>
我正在做的查询是这样的:
管理控制台:
q = day 1
fq = post:"day 1" OR title:"day 1"
hl = true
hl.fl =title,post
select?q=day+1&fq=post%3A%22day+1%22+OR+title%3A%22day+1%22&wt=xml&indent=true&hl=true&hl.fl=title%2Cpost&hl.simple.pre=%3Cem%3E&hl .simple.post=%3C%2Fem%3E
这些是我的领域:
<field name="post" type="text_general" indexed="true" stored="true" required="true" multiValued="false" />
<field name="post" type="text_general" indexed="true" stored="true" required="true" multiValued="false" />
这是我的 fied 类型 text_general 的 solr 架构部分:
<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.GreekStemFilterFactory"/>
<filter class="solr.GreekLowerCaseFilterFactory"/>
<filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" />
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
B) 我可以在高亮部分看到更令人不安的结果,即不是按预期突出显示整个单词,而是突出显示单个片段:
.where you get to see all of Athens ... <em>Day</em> 2 - Carmens
我不想在突出显示的部分看到这个结果(只需要看到“第 1 天”这两个词)。有任何想法吗 ?我正在阅读 Solr 的亮点部分,但是......真的......甚至没有一个例子!!!
最佳答案
需要插入的参数是 hl.q
基本上意味着“我想要突出显示这个短语”和 hl.usePhraseHighlighter=true 和 hl.useFastVectorHighlighter=true
因此,通过添加到我的原始查询:&hl.q="Day+1"&hl.usePhraseHighlighter=true&hl.useFastVectorHighlighter=true
起作用了。
对于 B) 我将 fq = post:"day 1" OR title:"day 1"
更改为 fq = post:"day 1"
。我知道后者与我需要的东西相比较少。
使用的 fastVectorHighliter 配置:
<field name="post" type="text_general" indexed="true" stored="true" required="true" multiValued="false" termVectors="true" termPositions="true" termOffsets="true"/>
关于Solr:如何仅突出显示整个搜索词组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25930180/