Elasticsearch 支持繁体中文

标签 elasticsearch smartcn

我正在尝试将中文索引并搜索到 Elasticsearch 中。通过使用 Smart Chinese Analysis (elasticsearch-analysis-smartcn) 插件我已经设法搜索简体中文和繁体中文的字符和单词。我试过在简体中文和繁体中文中插入相同的文本,但搜索只返回一个结果(取决于搜索的执行方式);因为文本是相同的,所以我希望返回两个结果。我读过here为了支持繁体中文,我还必须安装 STConvert Analysis (elasticsearch-analysis-stconvert) 插件。谁能提供一个使用这两个插件的工作示例? (或实现相同结果的替代方法)

测试索引创建为

{  
   "settings":{  
      "analysis":{  
         "analyzer":{
            "chinese":{  
               "type":"smartcn"
            }
         }
      }
   },
   "mappings":{  
      "testType":{  
         "properties":{  
            "message":{  
               "store":"yes",
               "type":"string",
               "index":"analyzed",
               "analyzer":"chinese"
            },
            "documentText": {
               "store":"compress",
               "type":"string",
               "index":"analyzed",
               "analyzer":"chinese",
               "termVector":"with_positions_offsets"
            }
         }
      }
   }
}

而简体-繁体中具有相同文本的两个请求是

{
   "message": "汉字",
   "documentText": "制造器官的噴墨打印機 這是一種制造人體器官的裝置。這種裝置是利用打印機噴射生物 細胞、 生長激素、凝膠體,形成三維的生物活體組織。凝膠體主要是為細胞提供生長的平台,之后逐步形成所想要的器官或組織。這項技術可以人工方式制造心臟、肝臟、腎臟。這項研究已經取得了一定進展,目前正在研究如何將供應營養的血管印出來。這個創意目前已經得到了佳能等大公司的贊助"
}

{
   "message": "汉字",
   "documentText": "制造器官的喷墨打印机 这是一种制造人体器官的装置。这种装置是利用打印机喷射生物 细胞、 生长激素、凝胶体,形成叁维的生物活体组织。凝胶体主要是为细胞提供生长的平台,之后逐步形成所想要的器官或组织。这项技术可以人工方式制造心脏、肝脏、肾脏。这项研究已经取得了一定进展,目前正在研究如何将供应营养的血管印出来。这个创意目前已经得到了佳能等大公司的赞助"
}

最后,我想返回两个结果的示例搜索是

{  
   "query":{  
      "query_string":{  
         "query":"documentText : 制造器官的喷墨打印机",
         "default_operator":"AND"
      }
   }
}

最佳答案

经过多次尝试,我找到了一个可行的配置。我没有设法使 smartcnstconvert 插件一起工作,所以我使用了 elasticsearch 的 cjk 分析器,并添加了 icu_tokenizer 代替。通过使用 t2ss2t 作为过滤器,每个字符都以繁体和简体两种形式存储。

{  
   "settings":{  
      "analysis":{  
        "filter": {
          "english_stop": {
            "type":       "stop",
            "stopwords":  "_english_" 
          },
          "t2s_convert": {
            "type": "stconvert",
            "delimiter": ",",
            "convert_type": "t2s"
          },
          "s2t_convert": {
            "type": "stconvert",
            "delimiter": ",",
            "convert_type": "s2t"
          }
        },
        "analyzer": {
          "my_cjk": {
            "tokenizer": "icu_tokenizer",
            "filter": [
              "cjk_width",
              "lowercase",
              "cjk_bigram",
              "english_stop",
              "t2s_convert",
              "s2t_convert"
            ]
          }
        }
      }
   },
   "mappings":{  
      "testType":{  
         "properties":{  
            "message":{  
               "store":"yes",
               "type":"string",
               "index":"analyzed",
               "analyzer":"my_cjk"
            },
            "documentText": {
               "store":"compress",
               "type":"string",
               "index":"analyzed",
               "analyzer":"my_cjk",
               "termVector":"with_positions_offsets"
            }
         }
      }
   }
}

关于Elasticsearch 支持繁体中文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31435511/

相关文章:

java - 有没有办法在 Elasticsearch 中连接同一对象之间的属性?

elasticsearch - bool 过滤器以及应和必须组合

python - Elasticsearch 词聚合中的问题

ruby-on-rails - 创建索引时的 Elasticsearch 错误可能是由于模块 Kuromoji 未正确安装

elasticsearch - Grok 没有正确匹配多行日志条目?

amazon-web-services - Couchbase-ElasticSearch Java堆内存