如何在liferay中创建自定义Elasticsearch分析器

问题描述

在 Elasticsearch 中,我想用我的自定义分析器索引一些字段。所以首先,我添加了额外的配置我的分析器

Liferay -> 控制面板 -> 系统设置 -> " Serach Elasticsearch 并选择'-Elasticsearch 7-' -->"

其他索引配置

DataContext = new viewmodel()

覆盖类型映射

{
  "analysis": {
        "analyzer": {
            "mmc_custom": {
                "tokenizer": "standard","filter": [
                    "standard","my_ascii_folding","lowercase"
                ]
            }
        },"filter": {
            "my_ascii_folding": {
                "type": "asciifolding","preserve_original": true
            }
        }
    }
}

在Liferay Elasticsearch中添加这个属性后,我重置了索引,重启了Liferay。 Portal 使用我的映射和分析器正确创建了一个新索引。然后我重新索引了我的文档。当我在 Elasticsearch 中搜索时,它显示了预期的结果,我看到它按照我的意愿分析了我的字段。但是当我通过 Liferay 门户搜索时,我没有看到任何变化,我的领域没有被分析。我做错了什么?我有新的索引和数据来自它,为什么 Liferay 看不到它?

我提到了这个site

解决方法

如果你想在 Liferay 中使用自定义分析器,你需要执行两个步骤。

  1. 编写分析器
  2. 定义映射以覆盖 Liferay 映射

让我解释一下

  1. 编写你的分析器 在附加索引配置中写在分析器下面

     {
    "analysis":{
       "filter":{
          "my_synonym_filter":{
             "type":"synonym","synonyms":[
                "british,english","queen,monarch"
             ]
          }
       },"analyzer":{
          "custom_analyzer":{
             "tokenizer":"standard","filter":[
                "lowercase","my_synonym_filter","asciifolding","stemmer"
             ]
          }
       }
    }
     }
    
  2. 现在您的分析器已准备就绪,现在您可以覆盖 Liferay 映射

要覆盖映射,您可以复制 Liferay 映射文件(控制面板 -> 搜索 -> 字段映射)

根据您的要求进行更改(将 liferay-{company name} 更改为 LiferayDocumentType)

所以现在新文件将如下所示

{
    "LiferayDocumentType" : {
       "dynamic_templates" : [
              //Your mappings
       ]
    }
}

在字段中添加这个覆盖文件(覆盖类型映射)

然后重新索引数据,然后您可以使用搜索来测试您的分析器