gpt4 book ai didi

elasticsearch - 搜索Elasticsearch时自定义分析器不起作用

转载 作者:行者123 更新时间:2023-12-02 22:21:12 25 4
gpt4 key购买 nike

我使用documents类型创建_doc索引。然后我
如下设置自定义分析器

POST /documents/_close
PUT /documents/_settings
{
"settings": {
"analysis": {
"analyzer": {
"custom_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [
"lowercase",
"word_delimiter_graph"
]
}
}
}
},
"mappings": {
"properties": {
"question": {
"type": "text",
"analyzer": "custom_analyzer"
},
"question_group": {
"type": "text",
"analyzer": "custom_analyzer"
}
}
}
}
POST /documents/_open
我尝试使用此 custom_analyzer然后有效
POST http://localhost:9200/documents/_analyze
{
"analyzer": "custom_analyzer",
"text": "FIRE_DETECTED"
}
# And the result (lowercase and remove _ )
{
"tokens": [
{
"token": "fire",
"start_offset": 0,
"end_offset": 4,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "detected",
"start_offset": 5,
"end_offset": 13,
"type": "<ALPHANUM>",
"position": 1
}
]
}
但是,当我尝试搜索“火”或“检测到火”时, 无法使用
当我尝试搜索“fire_detected”, 时,它仍然可以工作
(我将“FIRE_DETECTED”编入索引)
#This POST found nothing
POST /documents/_search
{
"query": {
"multi_match": {
"query": "fire detected",
"fields": [
"question^2",
"question_group"
]
}
}
}

解决方案
尝试使用新设置(上面)创建新索引
PUT /documents5
{
"settings": {...}
}
索引数据
PUT http://localhost:9200/documents5/_doc/1
{
"question": "fire_detected"
}
搜索

最佳答案

发生这种情况的原因是,您只是将custom_analyzer的定义添加到索引中,但没有对数据(索引中的文档)重新索引,因此新的 token 不存在于反向索引中。 为了解决此问题,只需再次为要在搜索结果中包含的文档重新编制索引。
您正在使用multi_match查询,该查询内部使用match查询,并且对这些查询进行了分析,因此您不需要搜索时间分析器。match查询使用在字段上定义的同一分析器来创建搜索 token (即,根据搜索词创建的)。
match query official docs

Returns documents that match a provided text, number, date or booleanvalue. The provided text is analyzed before matching.

关于elasticsearch - 搜索Elasticsearch时自定义分析器不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64116458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com