elasticsearch dsl集成python中indices.analyze方法参数analyzer的坑(调用es的analyze接口分析字符串)

本文记录了作者在Python中使用Elasticsearch的indices.analyze接口时遇到的问题及解决过程,详细介绍了如何正确配置IK分词器,并提供了一个有效的示例。

    今天在做elasticsearch的过程中遇上大坑,填坑过程

    在python中调用elasticsearch的indices.analyze接口的过程中,本来看网上的文章是这样写的

result = es.indices.analyze(index=index,body=text,analyzer='ik_max_word' params={'filter':["lowercase"]} )

    调试过程中,WTF,为什么走不动,看错误提示是在这一句,然后就ctrl点进去analyze方法。

    一看就发现,原来源码中没有analyzer这个参数啊,为啥资料有的!?不管了,赶紧看看究竟怎么配置。原来源码中给出了在body这个参数配置分析器和文档类型:

 :arg body: Define analyzer/tokenizer parameters and the text on which
            the analysis should be performed

    这就好办了,但是我试过ABCDEFG种方法,发现都配置不对,而且网上资料为0,是零........,然后看到后面params的方法,突然想到会不会就是按照elasticsearch那样子写字典呢,那么elasticsearch是怎么写分析器的呢?是这样:

GET _analyze
{
    "analyzer" = "ik_max_word",
    "text":需要分析的文档
}

    一看就好办了,照抄一波

result= es.indices.analyze(index=index,body={'text':text,'analyzer':"ik_max_word"}, params={'filter':["lowercase"]} )
    成功了,这里注意,text是我之前就传进来的参数,所以不要写成“text ”
{"类型": "服务器", "时间戳": "2025-08-26T14:17:52,022Z", "级别": "警告", "组件": "r.suppressed", "集群名称": "docker-cluster", "节点名称": "eb381a9b7fb1", "消息": "路径:/_analyze参数:{pretty=true}", "集群UUID": "NWxgy8T0SrmZf-idm0rmjg", "节点ID": "GASFU1S6RKSSSR8M3qkUqQ" , "堆栈跟踪": ["org.elasticsearch.transport.RemoteTransportException: [eb381a9b7fb1][172.19.0.3:9300][indices:admin/analyze[s]]", "原因:java.lang.NullPointerException(空指针异常):无法调用 \"org.wltea.analyzer.dic.DictSegment.match(char[], int, int)\" 方法,因为 \"org.wltea.analyzer.dic.Dictionary.singleton._StopWords\" 为 null(空值)", "在 org.wltea.analyzer.dic.Dictionary.isStopWord(Dictionary.java:377) 位置 ~[?:?]", "在 org.wltea.analyzer.core.AnalyzeContext.getNextLexeme(AnalyzeContext.java:325) 位置 ~[?:?]", "在 org.wltea.analyzer.core.IKSegmenter.next(IKSegmenter.java:95) 位置 ~[?:?]", "在 org.wltea.analyzer.lucene.IKTokenizer.incrementToken(IKTokenizer.java:88) 位置 ~[?:?]", "在 org.elasticsearch.action.admin.indices.analyze.TransportAnalyzeAction.simpleAnalyze(TransportAnalyzeAction.java:222) 位置 ~[elasticsearch-7.12.1.jar:7.12.1]", "在 org.elasticsearch.action.admin.indices.analyze.TransportAnalyzeAction.analyze(TransportAnalyzeAction.java:204) 位置 ~[elasticsearch-7.12.1.jar:7.12.1]", "在 org.elasticsearch.action.admin.indices.analyze.TransportAnalyzeAction.analyze(TransportAnalyzeAction.java:127) 位置 ~[elasticsearch-7.12.1.jar:7.12.1]", "在 org.elasticsearch.action.admin.indices.analyze.TransportAnalyzeAction.shardOperation(TransportAnalyzeAction.java:110) 位置 ~[elasticsearch-7.12.1.jar:7.12.1]", "在 org.elasticsearch.action.admin.indices.analyze.TransportAnalyzeAction.shardOperation(TransportAnalyzeAction.java:62) 位置 ~[elasticsearch-7.12.1.jar:7.12.1]", "在 org.elasticsearch.action.support.single.shard.TransportSingleShardAction.lambda$asyncShardOperation$0(TransportSingleShardAction.java:99) 位置 ~[elasticsearch-7.12.1.jar:7.12.1]", "在 org.elasticsearch.action.ActionRunnable.lambda$supply$0(ActionRunnable.java:47) 位置 [elasticsearch-7.12.1.jar:7.12.1]", "在 org.elasticsearch.action.ActionRunnable$2.doRun(ActionRunnable.java:62) 位置 ~[elasticsearch-7.12.1.jar:7.12.1]", "在 org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingAbstractRunnable.doRun(ThreadContext.java:732) 位置 [elasticsearch-7.12.1.jar:7.12.1]", "在 org.elasticsearch.common.util.concurrent.AbstractRunnable.run(AbstractRunnable.java:26) 位置 [elasticsearch-7.12.1.jar:7.12.1]", "在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) 位置 [?:?]", "在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) 位置 [?:?]", "在 java.lang.Thread.run(Thread.java:831) 位置 [?:?]"] }
最新发布
08-27
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值