SOLR-如何突出显示通配符搜索结果的精确短语

SOLR-如何突出显示通配符搜索结果的精确短语,solr,wildcard,highlight,Solr,Wildcard,Highlight,这是在架构中声明的字段类型: <fieldType name="c_string" class="solr.TextField"> <analyzer type="index"> <tokenizer class="solr.KeywordTokenizerFactory"/> <filter class="solr.ASCIIFoldingFilterFactory"/> <filter class="solr.LowerCa

这是在架构中声明的字段类型:

<fieldType name="c_string" class="solr.TextField">
 <analyzer type="index">
  <tokenizer class="solr.KeywordTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
  <filter class="solr.ReversedWildcardFilterFactory" />
 </analyzer>
 <analyzer type="query">
  <tokenizer class="solr.KeywordTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
 </analyzer>
</fieldType>
但我想:

"title": [
        "<em>Keyword</em> and the rest of title"
突出显示结果示例:

  "highlighting":{
    "25352":{
      "text_dsc":["<em>14276|\nDzień dobry -  dokument testowy. \n\n \n\nTEST. \n\n\n</em>"]},
    "25353":{
      "text_dsc":["<em>14276|\nDzień dobry -  dokument testowy. \n\n \n\nTEST. \n\n\n</em>"]},
    "26693":{
      "text_dsc":["<em>14276|\nDzień dobry -  dokument testowy. \n\n \n\nTEST. \n\n\n</em>"]}}}
“突出显示”:{
"25352":{
“text|u dsc”:[“14276| \nDzie|dobry-dokument testowy.\n\n\nTEST.\n\n\n”]},
"25353":{
“text|u dsc”:[“14276| \nDzie|dobry-dokument testowy.\n\n\nTEST.\n\n\n”]},
"26693":{
“text|dsc”:[“14276| \nDzie|dobry-dokument testowy.\n\n\n测试。\n\n\n”]}

如您所见,查询字符串是dobry,但整个字段高亮显示。为什么?如果如上所述使用solr.EdgeNGramFilterFactory,使用相同的查询,突出显示是正确的,但搜索是不正确的(始终是通配符)

使用StandardTokenizerFactory,您将获得所需的输出:

<fieldType name="c_string" class="solr.TextField">
 <analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
  <filter class="solr.ReversedWildcardFilterFactory" />
 </analyzer>
 <analyzer type="query">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
 </analyzer>
</fieldType>

更新

在两个不同的字段中索引文本,如

   <fieldType name="text_dsc" class="solr.TextField">
 <analyzer type="index">
  <tokenizer class="solr.KeywordTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
  <filter class="solr.ReversedWildcardFilterFactory" />
 </analyzer>
 <analyzer type="query">
  <tokenizer class="solr.KeywordTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
 </analyzer>
</fieldType>



<fieldType name="text_dsc_standard" class="solr.TextField">
 <analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
  <filter class="solr.ReversedWildcardFilterFactory" />
 </analyzer>
 <analyzer type="query">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
 </analyzer>
</fieldType>


在搜索查询中,设置hl.fl=text\u dsc\u standard。

使用StandardTokenizerFactory,您将获得所需的输出:

<fieldType name="c_string" class="solr.TextField">
 <analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
  <filter class="solr.ReversedWildcardFilterFactory" />
 </analyzer>
 <analyzer type="query">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
 </analyzer>
</fieldType>

更新

在两个不同的字段中索引文本,如

   <fieldType name="text_dsc" class="solr.TextField">
 <analyzer type="index">
  <tokenizer class="solr.KeywordTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
  <filter class="solr.ReversedWildcardFilterFactory" />
 </analyzer>
 <analyzer type="query">
  <tokenizer class="solr.KeywordTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
 </analyzer>
</fieldType>



<fieldType name="text_dsc_standard" class="solr.TextField">
 <analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
  <filter class="solr.ReversedWildcardFilterFactory" />
 </analyzer>
 <analyzer type="query">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
 </analyzer>
</fieldType>


在搜索查询中,设置hl.fl=text\u dsc\u standard。

使用StandardTokenizerFactory,您将获得所需的输出:

<fieldType name="c_string" class="solr.TextField">
 <analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
  <filter class="solr.ReversedWildcardFilterFactory" />
 </analyzer>
 <analyzer type="query">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
 </analyzer>
</fieldType>

更新

在两个不同的字段中索引文本,如

   <fieldType name="text_dsc" class="solr.TextField">
 <analyzer type="index">
  <tokenizer class="solr.KeywordTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
  <filter class="solr.ReversedWildcardFilterFactory" />
 </analyzer>
 <analyzer type="query">
  <tokenizer class="solr.KeywordTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
 </analyzer>
</fieldType>



<fieldType name="text_dsc_standard" class="solr.TextField">
 <analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
  <filter class="solr.ReversedWildcardFilterFactory" />
 </analyzer>
 <analyzer type="query">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
 </analyzer>
</fieldType>


在搜索查询中,设置hl.fl=text\u dsc\u standard。

使用StandardTokenizerFactory,您将获得所需的输出:

<fieldType name="c_string" class="solr.TextField">
 <analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
  <filter class="solr.ReversedWildcardFilterFactory" />
 </analyzer>
 <analyzer type="query">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
 </analyzer>
</fieldType>

更新

在两个不同的字段中索引文本,如

   <fieldType name="text_dsc" class="solr.TextField">
 <analyzer type="index">
  <tokenizer class="solr.KeywordTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
  <filter class="solr.ReversedWildcardFilterFactory" />
 </analyzer>
 <analyzer type="query">
  <tokenizer class="solr.KeywordTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
 </analyzer>
</fieldType>



<fieldType name="text_dsc_standard" class="solr.TextField">
 <analyzer type="index">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
  <filter class="solr.ReversedWildcardFilterFactory" />
 </analyzer>
 <analyzer type="query">
  <tokenizer class="solr.StandardTokenizerFactory"/>
  <filter class="solr.ASCIIFoldingFilterFactory"/>
  <filter class="solr.LowerCaseFilterFactory" />
 </analyzer>
</fieldType>



在您的搜索查询集hl.fl=text\u dsc\u standard中。

您可以发布一个示例查询,特别是突出显示参数吗?问题已更新。查询由solr webadmin界面生成。请发布一个示例查询,特别是突出显示参数?问题已更新。查询由solr webadmin界面生成。请发布一个示例查询,特别是突出显示参数?问题已更新。查询由solr webadmin界面生成。请发布一个示例查询,特别是突出显示参数?问题已更新。查询是由solr webadmin界面生成的。很抱歉,它不能正常工作。它总是将结果作为子字重新返回。例如:title:Keyword*和title:Keyword返回相同的结果。这是不能接受的。标题:关键字不应返回任何内容,因为没有通配符。请参阅关键字*表示在标题中搜索关键字,其余内容可以是任何内容。另一方面,如果搜索关键字,则如果标题包含关键字,则它是搜索结果的一部分。逻辑上,两者都将返回相同的结果。外汇:如果搜索关键字,则不会显示任何结果,如果搜索关键字**d,则会匹配包含中间任何内容的结果。如果我错了,请更正我。这不是通配符对我的用途。示例字段内容“一,二”。查询“一”不应返回任何内容,因为它与短语“一,二”不匹配。但查询“One*”应该返回结果,因为它意味着“One”及其后面的任何文本。在您的解决方案中,两者都返回相同的结果,但都是错误的。要清楚,我需要使用通配符的类SQL语法的完整等效项。Substrig,不关心字符串内容。很抱歉,它不能正常工作。它总是将结果作为子字重新返回。例如:title:Keyword*和title:Keyword返回相同的结果。这是不能接受的。标题:关键字不应返回任何内容,因为没有通配符。请参阅关键字*表示在标题中搜索关键字,其余内容可以是任何内容。另一方面,如果搜索关键字,则如果标题包含关键字,则它是搜索结果的一部分。逻辑上,两者都将返回相同的结果。外汇:如果搜索关键字,则不会显示任何结果,如果搜索关键字**d,则会匹配包含中间任何内容的结果。如果我错了,请更正我。这不是通配符对我的用途。示例字段内容“一,二”。查询“一”不应返回任何内容,因为它与短语“一,二”不匹配。但查询“One*”应该返回结果,因为它意味着“One”及其后面的任何文本。在您的解决方案中,两者都返回相同的结果,但都是错误的。要清楚,我需要使用通配符的类SQL语法的完整等效项。Substrig,不关心字符串内容。很抱歉,它不能正常工作。它总是将结果作为子字重新返回。例如:title:Keyword*和title:Keyword返回相同的结果。这是不能接受的。标题:关键字不应返回任何内容,因为没有通配符。请参阅关键字*表示在标题中搜索关键字,其余内容可以是任何内容。另一方面,如果搜索关键字,则如果标题包含关键字,则它是搜索结果的一部分。逻辑上,两者都将返回相同的结果。外汇:如果搜索关键字,则不会显示任何结果,如果搜索关键字**d,则会匹配包含中间任何内容的结果。如果我错了,请更正我。这不是通配符对我的用途。示例字段内容“一,二”。查询“一”不应返回任何内容,因为它与短语“一,二”不匹配。但查询“One*”应该返回结果,因为它意味着“One”及其后面的任何文本。在您的解决方案中,两者都返回相同的结果,但都是错误的。要清楚,我需要使用通配符的类SQL语法的完整等效项。Substrig,不关心字符串内容。很抱歉,它不能正常工作。它总是将结果作为子字重新返回。例如:title:Keyword*和title:Keyword返回相同的结果。这是不能接受的。title:Keyword不应该返回任何内容,因为没有通配符see Keyword*意味着在title和rest中搜索关键字可以是任何内容,如果您