gpt4 book ai didi

elasticsearch - 如何在 Elasticsearch 中用可扩展的前缀和后缀匹配短语?

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

我们有一个用例,我们希望在 flex 搜索中匹配短语,但是除了短语查询之外,我们还想要搜索部分短语。

例:

搜索短语:“welcome you”或“lcome you”或“welcome yo”或“lcome yo”,应与包含短语的文档匹配:

“欢迎您”

“我们欢迎你”

“欢迎你来”

“我们欢迎您光临”

也就是说,我们希望通过执行短语查询来维护单词的顺序,该短语查询具有添加的功能,该功能会向我们返回结果,该结果包含作为部分子字符串的短语,并且前缀和后缀可扩展到某些可配置的长度。
在Elastic中,我发现了类似的“match_phrase_prefix”,但它仅匹配以特定前缀开头的短语。

Ex返回结果以d前缀开头:

$ curl -XGET localhost:9200/startswith/test/_search?pretty -d '{
"query": {
"match_phrase_prefix": {
"title": {
"query": "d",
"max_expansions": 5
}
}
}
}'

有什么办法可以使我的后缀也实现吗?

最佳答案

我强烈建议您研究 shingle token filter

您可以使用自定义分析器定义索引,该分析器利用带状图,以便将除 token 本身之外的一组后续 token 索引在一起。

curl -XPUT localhost:9200/startswith -d '{
"settings": {
"analysis": {
"analyzer": {
"my_shingles": {
"tokenizer": "standard",
"filter": [
"lowercase",
"shingles"
]
}
},
"filter": {
"shingles": {
"type": "shingle",
"min_shingle_size": 2,
"max_shingle_size": 2,
"output_unigrams": true
}
}
}
},
"mappings": {
"test": {
"properties": {
"title": {
"type": "text",
"analyzer": "my_shingles"
}
}
}
}
}'

例如, we welcome you to将被索引为以下标记
  • we
  • we welcome
  • welcome
  • welcome you
  • you
  • you to
  • to

  • 然后,您可以索引一些样本文档:
    curl -XPUT localhost:9200/startswith/test/_bulk -d '
    {"index": {}}
    {"title": "welcome you"}
    {"index": {}}
    {"title": "we welcome you"}
    {"index": {}}
    {"title": "welcome you to"}
    {"index": {}}
    {"title": "we welcome you to"}
    '

    最后,您可以运行以下查询以匹配上述所有四个文档,如下所示:
    curl -XPOST localhost:9200/startswith/test/_search -d '{
    "query": {
    "match": {"title": "welcome you"}
    }
    }'

    请注意,此方法比 match_phrase_prefix查询更强大,因为它使您可以在正文的任何​​位置(无论是开头还是结尾)匹配后续标记。

    关于elasticsearch - 如何在 Elasticsearch 中用可扩展的前缀和后缀匹配短语?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43757857/

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