在Solr 7.x中,如何仅使用逗号而不是空格或其他特殊字符进行标记?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Solr 7.x中,如何仅使用逗号而不是空格或其他特殊字符进行标记?相关的知识,希望对你有一定的参考价值。

在我的架构中,我有一列以逗号分隔的actor列表。例如,Chris Pratt,Vin Diesel,Bradley Cooper,Zoe Saldana。另一列用逗号分隔的流派。例如Action,Adventure,Sci-Fi。在这两种情况下,我只想在','而不是在空格或' - '上进行标记。我尝试按另一个stackoverflow问题的建议创建新的FieldType,

<fieldType name="commaDelimited" class="solr.TextField">
    <analyzer>
        <tokenizer class="solr.PatternTokenizerFactory" pattern="[,]" />
    </analyzer>
</fieldType>

它正在分裂','但它也分裂在空白和' - '上,导致像克里斯,普拉特,维恩,迪塞尔,布拉德利,库珀,佐伊,萨尔达娜,科幻,菲尔等标记。我希望它只能在','而不是任何其他特殊角色上分开。我怎样才能做到这一点 ?

答案

您可以使用我详细介绍in another recent answer的相同概念:

<fieldType name="comma-separated-list" class="solr.TextField">
  <analyzer>
    <tokenizer class="solr.SimplePatternTokenizerFactory" pattern="[^,]+"/>
  </analyzer>
</fieldType>

SimplePatternTokenizer类似于PatternTokenizer,但仅支持完整正则表达式语法的子集。这使得这样的任务更快。上面给出的模式将在,上分割标记(即捕获到每个,的所有内容)。

要通过API添加字段,您可以使用:

curl -X POST -H 'Content-type:application/json' --data-binary '{
  "add-field-type" : {
     "name":"comma-separated-list",
     "class":"solr.TextField",
     "positionIncrementGap":"100",
     "analyzer" : {
        "tokenizer":{
           "class":"solr.SimplePatternTokenizerFactory", "pattern": "[^,]+" },
        }
     }
  }
}' http://localhost:8983/solr/collectionname/schema
另一答案

尝试使用以下标记生成器:

<tokenizer class = "solr.PatternTokenizerFactory" pattern = " s *,:;  s *" />

以上是关于在Solr 7.x中,如何仅使用逗号而不是空格或其他特殊字符进行标记?的主要内容,如果未能解决你的问题,请参考以下文章

如何用逗号而不是空格分割列表

Solr 7.x 是不是支持 Java 11?

检索Solr查询中的特定字段?

在搜索普通查询而不是全文搜索的情况下,Solr是否比普通的RDBMS更好?

如何在映射列表中使用而不是逗号

打开用空格分隔符保存为逗号分隔符的CSV文件[关闭]