1

在 solr 中,我必须在我的数据库的“名称”字段中获取 uniqque 值。

出于这个原因,我阅读了关于分组的内容,我得到了想要的结果

{
  "responseHeader":{
    "status":0,
    "QTime":16,
    "params":{
      "indent":"true",
      "q":"name:И*",
      "group.field":"name",
      "group":"true",
      "wt":"json"}},
  "grouped":{
    "name":{
      "matches":2231,
      "groups":[{
          "groupValue":"ИВАН",
          "doclist":{"numFound":1144,"start":0,"docs":[
              {
                "obshtina":"ПЛОВДИВ",
                "phone":"032/670309",
                "timestamp":"2013-03-04T08:43:53.553Z"}]
          }},
        {
          "groupValue":"ИЛИЯ",
          "doclist":{"numFound":177,"start":0,"docs":[
              {
                "obshtina":"БРЕЗОВО",
                "phone":"(3191)2265",
                ..............................

问题是现在我注意到不幸的是我有 2 个组实际上是相同的 'Иван' 和 'ИВАН' 。问题是我的“名称”字段应该是字符串类型,所以我可以使用我需要的通配符,所以我不能让它成为例如文本并使用小写过滤器

4

2 回答 2

3

您可以使用KeywordTokenizerFactory(绝对没有标记化,就像字符串字段一样)和LowerCaseFilterFactory来获得您想要的。

您仍然可以执行通配符搜索。

于 2013-03-13T08:12:50.687 回答
2

添加到上一个答案中,您可以使用如下新的 Solr 文本类型,在索引时只需将值存储为小写的单个标记。在搜索时,只需将搜索文本视为小写的单个标记。这样就可以得到想要的效果。

      <fieldType name="lcase" class="solr.TextField" positionIncrementGap="100">
     <analyzer type="index">
             <tokenizer class="solr.KeywordTokenizerFactory"/>
             <filter class="solr.LowerCaseFilterFactory" />
         </analyzer>
         <analyzer  type="query">
             <tokenizer class="solr.KeywordTokenizerFactory"/>
             <filter class="solr.LowerCaseFilterFactory" />
         </analyzer>
      </fieldType>
于 2013-03-13T10:18:00.397 回答