gpt4 book ai didi

elasticsearch - Elasticsearch中短语匹配的问题

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

我正在尝试使用elasticsearch执行词组匹配。

这是我要完成的工作:

data - 1: {
"test" {
"title" : "text1 text2"
}
}

2: {
"test" {
"title" : "text3 text4"
}
}

3: {
"test" {
"title" : "text5"
}
}


4: {
"test" {
"title" : "text6"
}
}

搜索词:

如果我查找“text0 text1 text2 text3”-它应该返回#1(匹配完整字符串)

如果我查找“text6 text5 text4 text3”-它应该返回#4,#3,但不返回#2,因为它的顺序不相同。

这是我尝试过的:
  • index_analyzer设置为关键字,并将search_analyzer设置为标准
  • 也尝试创建自定义 token

  • 但是我的解决方案都无法让我从搜索查询中查找文档中与关键字匹配的子字符串。

    如果有人写过类似的查询,您能否提供如何配置映射以及使用哪种查询。

    最佳答案

    我在这里看到的是:您希望您的搜索与查询发送的所有 token 匹配。如果这些标记确实匹配,则必须与标题完全匹配。

    这意味着将您的标题字段索引为关键字将使您获得强制匹配。但是,用于搜索的标准分析器将永远不会匹配标题空间,因为您将拥有索引 token {"text1 text2"}和搜索 token [{"text1},{"text2"}]。您不能将短语匹配与任何草率的值一起使用,否则 token 顺序要求将被忽略。

    因此,您真正需要的是在索引期间生成关键字标记,但是无论何时搜索,都需要生成带状疱疹。您的带状疱疹将保持秩序,如果其中之一相匹配,则认为这是可行的。我将设置为不输出字母组合,但如果没有带状疱疹,则允许字母组合。这意味着,如果您只有一个单词,它将输出该 token ,但是如果可以将您的搜索单词组合成各种数量的带盖 token ,则不会发出单个单词 token 。

    PUT
    { "settings":
    {
    "analysis": {
    "filter": {
    "my_shingle": {
    "type": "shingle",
    "max_shingle_size": 50,
    "output_unigrams": false
    }
    },
    "analyzer": {
    "my_shingler": {
    "filter": [
    "lowercase",
    "asciifolding",
    "my_shingle"
    ],
    "type": "custom",
    "tokenizer": "whitespace"
    }
    }
    }
    }
    }

    Then you just want to set your type mapping to use the keyword analyzer for index and the `my_shingler` analyzer for search.

    http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-shingle-tokenfilter.html

    关于elasticsearch - Elasticsearch中短语匹配的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19259367/

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