在弹性搜索中对电子邮件使用自动完成功能不起作用

内兰德尔

我有一个字段,定义了以下映射:

"my_field": {
    "properties": {
        "address": {
            "type": "string",
            "analyzer": "email",
            "search_analyzer": "whitespace"
        }
    }
}

我的电子邮件分析器如下所示:

{
    "analysis": {
        "filter": {
            "email_filter": {
                "type": "edge_ngram",
                "min_gram": "3",
                "max_gram": "255"
            }
        },
        "analyzer": {
            "email": {
                "type": "custom",
                "filter": [
                    "lowercase",
                    "email_filter",
                    "unique"
                ],
                "tokenizer": "uax_url_email"
            }
        }
    }
}

当我尝试搜索电子邮件ID时,例如[email protected]

搜索tes,test.xy等字词不起作用。但是,如果我搜索test.xyz或[email protected],则可以正常运行。我尝试使用电子邮件过滤器分析令牌,并且按预期工作正常

前任。击中http:// localhost:9200 / my_index / _analyze?analyzer=email&[email protected]

我得到:

{
    "tokens": [{
        "token": "tes",
        "start_offset": 0,
        "end_offset": 20,
        "type": "word",
        "position": 0
    }, {
        "token": "test",
        "start_offset": 0,
        "end_offset": 20,
        "type": "word",
        "position": 0
    }, {
        "token": "test.",
        "start_offset": 0,
        "end_offset": 20,
        "type": "word",
        "position": 0
    }, {
        "token": "test.x",
        "start_offset": 0,
        "end_offset": 20,
        "type": "word",
        "position": 0
    }, {
        "token": "test.xy",
        "start_offset": 0,
        "end_offset": 20,
        "type": "word",
        "position": 0
    }, {
        "token": "test.xyz",
        "start_offset": 0,
        "end_offset": 20,
        "type": "word",
        "position": 0
    }, {
        "token": "[email protected]",
        "start_offset": 0,
        "end_offset": 20,
        "type": "word",
        "position": 0
    }, {
        "token": "[email protected]",
        "start_offset": 0,
        "end_offset": 20,
        "type": "word",
        "position": 0
    }, {
        "token": "[email protected]",
        "start_offset": 0,
        "end_offset": 20,
        "type": "word",
        "position": 0
    }, {
        "token": "[email protected]",
        "start_offset": 0,
        "end_offset": 20,
        "type": "word",
        "position": 0
    }, {
        "token": "[email protected]",
        "start_offset": 0,
        "end_offset": 20,
        "type": "word",
        "position": 0
    }, {
        "token": "[email protected]",
        "start_offset": 0,
        "end_offset": 20,
        "type": "word",
        "position": 0
    }, {
        "token": "[email protected]",
        "start_offset": 0,
        "end_offset": 20,
        "type": "word",
        "position": 0
    }, {
        "token": "[email protected]",
        "start_offset": 0,
        "end_offset": 20,
        "type": "word",
        "position": 0
    }, {
        "token": "[email protected]",
        "start_offset": 0,
        "end_offset": 20,
        "type": "word",
        "position": 0
    }, {
        "token": "[email protected]",
        "start_offset": 0,
        "end_offset": 20,
        "type": "word",
        "position": 0
    }, {
        "token": "[email protected]",
        "start_offset": 0,
        "end_offset": 20,
        "type": "word",
        "position": 0
    }, {
        "token": "[email protected]",
        "start_offset": 0,
        "end_offset": 20,
        "type": "word",
        "position": 0
    }]
}

所以我知道令牌化是可行的。但是在搜索时,它无法搜索部分字符串。

对于前。寻找http:// localhost:9200 / my_index / my_field / _search?q = test,结果未显示任何匹配。

我的索引的详细信息:

{
    "my_index": {
        "aliases": {
            "alias_default": {}
        },
        "mappings": {
            "my_field": {
                "properties": {
                    "address": {
                        "type": "string",
                        "analyzer": "email",
                        "search_analyzer": "whitespace"
                    },
                    "boost": {
                        "type": "long"
                    },
                    "createdat": {
                        "type": "date",
                        "format": "strict_date_optional_time||epoch_millis"
                    },
                    "instanceid": {
                        "type": "long"
                    },
                    "isdeleted": {
                        "type": "integer"
                    },
                    "object": {
                        "type": "string"
                    },
                    "objecthash": {
                        "type": "string"
                    },
                    "objectid": {
                        "type": "string"
                    },
                    "parent": {
                        "type": "short"
                    },
                    "parentid": {
                        "type": "integer"
                    },
                    "updatedat": {
                        "type": "date",
                        "format": "strict_date_optional_time||epoch_millis"
                    }
                }
            }
        },
        "settings": {
            "index": {
                "creation_date": "1480342980403",
                "number_of_replicas": "1",
                "max_result_window": "100000",
                "uuid": "OUuiTma8CA2VNtw9Og",
                "analysis": {
                    "filter": {
                        "email_filter": {
                            "type": "edge_ngram",
                            "min_gram": "3",
                            "max_gram": "255"
                        },
                        "autocomplete_filter": {
                            "type": "edge_ngram",
                            "min_gram": "3",
                            "max_gram": "20"
                        }
                    },
                    "analyzer": {
                        "autocomplete": {
                            "type": "custom",
                            "filter": [
                                "lowercase",
                                "autocomplete_filter"
                            ],
                            "tokenizer": "standard"
                        },
                        "email": {
                            "type": "custom",
                            "filter": [
                                "lowercase",
                                "email_filter",
                                "unique"
                            ],
                            "tokenizer": "uax_url_email"
                        }
                    }
                },
                "number_of_shards": "5",
                "version": {
                    "created": "2010099"
                }
            }
        },
        "warmers": {}
    }
}

好的,除了您的查询之外,其他所有内容看起来都是正确的。

您只需要address像这样在查询中指定字段即可,它将起作用:

http://localhost:9200/my_index/my_field/_search?q=address:test

如果您未指定该address字段,则查询将在默认情况下_all其搜索分析器为该字段的字段上进行standard,因此您什么也找不到。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

PyCharm中的pytest固定装置自动完成功能不起作用

Godot / GDScript:自动完成功能不起作用

NSManagedObject子类的Xcode 9.3自动完成功能不起作用?

Visual Studio Code中的标签页自动完成功能不起作用

PhpStorm中的TailwindCSS自动完成功能不起作用

搜索查询后,文本框自动完成功能不起作用

jQuery自动完成功能不起作用?

Windows中OpenCV-Python的自动完成功能不起作用

自动完成功能不起作用

自动跳转自动完成功能不起作用

jQuery自动完成功能不起作用

ASP.NET MVC 4中的jQuery UI自动完成功能不起作用

蚀Java自动完成功能不起作用

HTML自动完成功能不起作用

组合框自动完成功能不起作用

PHP在功能不起作用之前从电子邮件中删除@

为什么我的自动完成功能不起作用?

电子邮件验证功能不起作用| VB.net

Moodle电子邮件功能不起作用

阿尔及利亚角度自动完成功能不起作用

vscode键入自动完成功能不起作用

Django自动完成功能不起作用

jquery中的自动完成功能不起作用,但jquery正常运行

HP打印机上的扫描到电子邮件功能不起作用

AJAX 自动完成功能不起作用

新文件中的空闲自动完成功能不起作用

PyCharm:由于使用了 with_metaclass(),因此“self ....”上的自动完成功能不起作用

尝试使其动态时,jQuery AJAX 自动完成功能不起作用

适用于 Unity 的 Visual Studio 自动完成功能不起作用