gpt4 book ai didi

elasticsearch - 什么是在Elasticsearch中查询全名的最佳配置

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

我正在尝试在Elasticsearch中设置搜索分析,并且尝试了许多组合,但均未成功,现在我不知道是否可行:

假设我有3个具有以下全名的用户

  • John Doe
  • Johnatan Lebus
  • Jane Doe

  • 输入:
  • Jo应该给出 John Doe Johnatan Lebus
  • Ja应该给出 Jane Doe
  • doe应该给出 Jane Doe John Doe
  • doe john应该仅提供 John Doe 而不是 Jane Doe

  • 最后一种情况可能吗,应该怎么配置?

    其实我有这个:
     "analysis": {
    "analyzer": {
    "keyword_analyzer": {
    "char_filter\"": [],
    "filter": [
    "lowercase",
    "asciifolding",
    "trim"
    ],
    "type": "custom",
    "tokenizer": "keyword"
    },
    "edge_ngram_analyzer": {
    "filter": [
    "lowercase"
    ],
    "tokenizer": "edge_ngram_tokenizer"
    },
    "edge_ngram_search_analyzer": {
    "tokenizer": "lowercase"
    }
    },
    "tokenizer": {
    "edge_ngram_tokenizer": {
    "token_chars": [
    "letter"
    ],
    "min_gram": "2",
    "type": "edge_ngram",
    "max_gram": "5"
    }
    }
    },

    谢谢

    最佳答案

    我绝对认为您的分析器可能适合您的用例,我怀疑您在查询时需要帮助。

    我使用您的分析仪设置了索引,并使用它创建了一个字段:

    PUT test
    {
    "settings": {
    "analysis": {
    "analyzer": {
    "keyword_analyzer": {
    "char_filter\"": [],
    "filter": [
    "lowercase",
    "asciifolding",
    "trim"
    ],
    "type": "custom",
    "tokenizer": "keyword"
    },
    "edge_ngram_analyzer": {
    "filter": [
    "lowercase"
    ],
    "tokenizer": "edge_ngram_tokenizer"
    },
    "edge_ngram_search_analyzer": {
    "tokenizer": "lowercase"
    }
    },
    "tokenizer": {
    "edge_ngram_tokenizer": {
    "token_chars": [
    "letter"
    ],
    "min_gram": "2",
    "type": "edge_ngram",
    "max_gram": "5"
    }
    }
    }
    },
    "mappings": {
    "test_doc": {
    "properties": {
    "full_name": {
    "type": "text",
    "analyzer": "edge_ngram_analyzer"
    }
    }
    }
    }
    }

    然后,我为一些文档建立索引:

    PUT test/test_doc/1
    {
    "full_name": "John Doe"
    }

    PUT test/test_doc/2
    {
    "full_name": "Jane Doe"
    }

    PUT test/test_doc/3
    {
    "full_name": "Johnatan Lebus"
    }

    然后,以您的最后一种情况为例,使用以下查询。

    GET test/_search
    {
    "query": {
    "match": {
    "full_name": {
    "operator": "and",
    "query": "doe john"
    }
    }
    }
    }

    用上面的任何文本替换“查询”字段,即可获得所需的结果。解决您问题的真正“解决方案”是在查询时更具创意,尽管从 token 的 Angular 看这似乎不可能。

    希望这可以帮助!

    关于elasticsearch - 什么是在Elasticsearch中查询全名的最佳配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54712800/

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