代码之家  ›  专栏  ›  技术社区  ›  mike rodent

检查并调整给定的分析器?

  •  0
  • mike rodent  · 技术社区  · 3 年前

    我在用法语分析器。

    检查了以下输出 IndexClient.analyze(...) 对于这个分析器,我对一些停用词有点不满意(例如,表达式“ayant cause”以“caus”的形式出现,因为“ayant”是一个停用词: French stopwords ).

    我该如何检查这些停用词,然后对其进行调整?我必须基于现有的法国分析器创建自定义分析器吗?或者我可以直接调整法国的吗?

    注意:我正在使用Python elasticsearch 模块(“瘦客户端”),但用REST命令来回答就可以了。

    0 回复  |  直到 3 年前
        1
  •  0
  •   Amit    3 年前

    是的,您可以轻松调整现有的分析器,并使用 Analyze API 弹性搜索

    最终,分析器由三个部分组成,即char过滤器、tokeniser和token-filter,您可以创建这些部分的组合来构建自己的自定义分析器,并使用REST API对其进行测试。

        2
  •  0
  •   mike rodent    3 年前

    花了相当多的时间,至少想出了一个变通办法。

    从Github下载了那个法语停用词文件后,我对其进行了编辑(例如,排除“ayant”)。当前位于我安装的ES安装程序的“config”目录中(尽管您可以设置绝对路径)。

    然后我把我的设置/映射对象做成这样:

    {
        'settings' : {
            'analysis' : {
                'analyzer' : {
                    'tweaked_french' : {
                        'type' : 'french',
                        # NB W10, config path currently D:\apps\ElasticSearch\elasticsearch-7.10.2\config
                        'stopwords_path' : 'tweaked_french_stop.txt',
                    },
                },
            },
        },
        
        'mappings': {
            'dynamic': 'strict',
            'properties': {
                'my_french_field' : {
                    'type' : 'text',
                    'term_vector' : 'with_positions_offsets',
                    'fields' : {
                        'french' : {
                            'type' : 'text',
                            'analyzer' : 'tweaked_french',
                            'term_vector' : 'with_positions_offsets',
                        },
                    },
                },
            },
        },
    }    
    

    那么,非常棒的是,根据我的实验,你可以得到一个查询对象来查找和使用定制的分析器(即它在安装的索引中存在并且可用)。因此,您的查询对象相对简单:

    {
        'query': {
            'simple_query_string': {
                'query': query_text,
                'fields': [
                    'my_french_field.french',
                ],
                'analyzer' : 'tweaked_french',
            },
        },
        'highlight': {
            'fields': {
                'my_french_field.french': {
                    'type': 'fvh',
    
                    ...
    
                },
            },
            'number_of_fragments': 0
        }
    }
    

    之后,您可以用法语查询:您的查询将被截断,结果将用于搜索。如果“ayant”是查询字符串中的一个单词,它现在将返回包括“ayant cause”在内的点击,证明查询和映射规范都使用了调整后的停用词列表。

    我仍然想知道是否存在一种不涉及使用外部文件的方法,即即时编辑已经存在的内容(或只是 看到 它已经在那里了…)。