gpt4 book ai didi

elasticsearch - 带有部分单词搜索的ElasticSearch “H & R Block”

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

要求是能够搜索以下术语:

  • “H&R”找到“H&R Block”。

  • 我已经成功使用word_delimiter单独实现了此要求,如此答案 elasticsearch tokenize "H&R Blocks" as "H", "R", "H&R", "Blocks"所述

    使用 ruby 代码:
    {
    char_filter: {
    strip_punctuation: { type: "mapping", mappings: [".=>", ",=>", "!=>", "?=>"] },
    },
    filter: {
    my_splitter: {
    type: "word_delimiter",
    preserve_original: true
    }
    },
    analyzer: {
    my_analyzer {
    char_filter: %w[strip_punctuation],
    type: "custom",
    tokenizer: "whitespace",
    filter: %w[lowercase asciifolding my_splitter]
    }
    }
    }

    而且,在同一查询中,我们需要自动完成功能或部分单词匹配,因此
  • “Ser”,“Serv”,“Servi”,“Servic”和“Service”都找到“Service”和“Services”。

  • 我设法使用ngram单独实现了这一要求。
    {
    char_filter: {
    strip_punctuation: { type: "mapping", mappings: [".=>", ",=>", "!=>", "?=>"] }
    },
    analyzer: {
    my_analyzer: {
    char_filter: %w[strip_punctuation],
    tokenizer: "my_ngram",
    filter: %w[lowercase asciifolding]
    }
    },
    tokenizer: {
    my_ngram: {
    type: "nGram",
    min_gram: "3",
    max_gram: "10",
    token_chars: %w[letter digit]
    }
    }
    }

    我只是无法一起实现它们。当我使用ngram时,会忽略短词,因此省略了“H&R”。当我使用word_delimiter时,部分单词搜索将停止工作。下面,我最近尝试合并这两个要求,结果是支持部分单词搜索,但不支持“H&R”。
    {
    char_filter: {
    strip_punctuation: { type: "mapping", mappings: [".=>", ",=>", "!=>", "?=>"] }
    },
    filter: {
    my_splitter: {
    type: "word_delimiter",
    preserve_original: true
    }
    },
    analyzer: {
    my_analyzer: {
    char_filter: %w[strip_punctuation],
    type: "custom",
    tokenizer: "my_tokenizer",
    filter: %w[lowercase asciifolding my_splitter]
    }
    },
    tokenizer: {
    my_tokenizer: {
    type: "nGram",
    min_gram: "3",
    max_gram: "10",
    token_chars: %w[letter digit]
    }
    }
    }

    最佳答案

    您可以使用映射中的 multi_field 以多种方式索引同一字段。您可以在默认字段上使用带有自定义标记器的全文搜索,并为自动完成需求创建特殊的索引。

    "title": {
    "type": "string",
    "fields": {
    "raw": { "type": "string", "index": "not_analyzed" }
    }
    }

    执行自动完成时,您的查询需要稍有不同,因为该字段将是 title.raw而不是 title

    一旦以对查询有意义的所有方式对字段进行了索引,就可以使用 bool(boolean) 型“应该”查询来查询索引,该查询应与标记化版本和单词start查询匹配。可能应该为与完整单词匹配的第一个查询提供更大的提升,以使直接匹配排在最前面。

    关于elasticsearch - 带有部分单词搜索的ElasticSearch “H & R Block”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29010826/

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