当前位置: 首页 > 知识库问答 >
问题:

如何创建一个自定义的Elasticsearch分析器

孙光临
2023-03-14

在Elasticsearch中,我想用我的自定义分析器索引一些字段。因此,首先,我将分析器添加到其他配置中

Liferay公司-

其他索引配置

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

覆盖类型映射

"title": {
    "mapping": {
        "analyzer": "mmc_custom",
        "index": "analyzed",
        "store": "true",
        "term_vector": "with_positions_offsets",
        "type": "string"
    }
}

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

我提到了这个网站。

共有1个答案

华谭三
2023-03-14

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

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

听我解释

>

  • 在附加索引配置中的分析器下方写入分析器

     {
    "analysis":{
       "filter":{
          "my_synonym_filter":{
             "type":"synonym",
             "synonyms":[
                "british,english",
                "queen,monarch"
             ]
          }
       },
       "analyzer":{
          "custom_analyzer":{
             "tokenizer":"standard",
             "filter":[
                "lowercase",
                "my_synonym_filter",
                "asciifolding",
                "stemmer"
             ]
          }
       }
    }
     }
    

    现在您的分析仪已准备就绪,现在您可以覆盖Liferay映射

    要覆盖映射,您可以复制Liferay映射文件(控制面板-

    根据您的要求进行更改(更改版本-{公司名称}为LiferayDocumentType)

    所以现在新文件如下所示

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

    在字段中添加此替代文件(替代类型映射)

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

  •  类似资料:
    • 问题内容: 对于使用嵌套客户端的Elasticsearch非常新,我正在使用自定义分析器创建索引,但是在使用分析进行测试时,它似乎并未使用自定义分析器。主要没有Edgengram令牌出现。我缺少什么使我的自定义分析器成为索引的默认设置吗?当我使用elastichq检查映射时,它们会显示我的自定义分析器。 问题答案: 您已将自定义分析器添加到索引中,但是现在您需要将其应用到字段中。您可以在字段映射级

    • 我正在使用自定义的NGRAM分析器,它有一个NGRAM标记器。我也用过小写过滤器。对于没有字符的搜索,该查询运行良好。但是当我搜索某些符号时,它失败了。由于我使用了小写标记器,Elasticsearch不分析符号。我知道空白标记器可以帮助我解决这个问题。如何在一个分析器中使用两个标记器?下面是映射: 我有办法解决这个问题吗?

    • 问题内容: 我使用以下命令通过请求创建索引: 但这返回以下错误: 我发送的json似乎有效。此错误的原因是什么? 我正在使用ES 2.2.0。 问题答案: 由于错误消息描述了自定义分析仪,例如 不是映射中选项的有效值。根据文档,它只能采用的值是 没有 不要将此字段值添加到索引中。使用此设置,该字段将不可查询。 not_analyzed 将字段值不变地添加到索引中,作为一项。这是所有支持此选项的字段

    • 问题内容: 历史上一直存在“ 如何在没有主要方法的情况下启动应用程序 ”的问题,大多数都沿用“ 您不能 ”的方式陈述。我注意到现在如何可以通过扩展来启动JavaFX应用程序。我一直在使用与相似的方法,但是在这种情况下,我始终将主要方法视为样板代码。因此,我再次开始寻找答案。 我找到了这个答案,将我们链接到可以学习如何创建自己的JVM启动器的地方,但不幸的是,该文章不再存在。我花了很长时间寻找可能暗

    • 我正在为我的硕士使用py elasticsearch dsl,我正在土耳其标题语料库中创建标题文档索引,我需要为土耳其语言实现一个自定义的小写分析器:https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-lowercase-tokenfilter.html#analysis-小写令牌过滤器 我试着这样做:

    • 我无法确定问题的原因,我不知道是分析器无效还是elasticsearch甚至找到了autocomplete-analyser.json文件。我该怎么解决这个?