gpt4 book ai didi

elasticsearch - match_phrase_prefix 不返回 match_phrase 获得的结果

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

匹配短语查询

{ 
"query": {
"match_phrase": {
"approved_labelled_products.companies": "SOMETHING INC"
}
}

返回一个特定的结果但是match_phrase_prefix 查询

{
"query": {
"match_phrase_prefix": {
"approved_labelled_products.companies": "SOME.*"
}
}
}

返回一个空的结果集

"hits": 
{
"total": 0,
"max_score": null,
"hits": []
}

match_phrase_prefix 必须至少返回 match_phrase 查询已获得的数据,但它没有。

数据的映射如下

    "approved_labelled_products": {
"properties": {
"companies": {
"type": "keyword",
"null_value": "NULL",
"ignore_above": 9500
}
}
}

最佳答案

match_phrasematch_phrase_prefix查询是全文搜索查询,要求数据字段为 text类型。它与 keyword 有很大不同。您正在使用的类型,现在让我解释一下您现在可以做什么以及有什么区别。

我可以让 match_phrase_prefix 工作吗?

是的,您可以使用 match_phrase_prefix如果您将字段类型更改为 text

如何使用 keyword 字段搜索前缀?

keyword 按原样存储和查询,没有任何 analysis .把它想象成一个字符串;要查找具有给定前缀的此类字段的所有文档,使用 prefix 就足够了查询。

让我们定义映射并插入几个文档:

PUT myindex
{
"mappings": {
"_doc": {
"properties": {
"approved_labelled_products": {
"properties": {
"companies": {
"type": "keyword",
"null_value": "NULL",
"ignore_above": 9500
}
}
}
}
}
}
}

POST myindex/_doc
{
"approved_labelled_products": {
"companies": "SOMETHING INC"
}
}

现在我们可以发出这样的查询:

POST myindex/_doc/_search
{
"query": {
"prefix": {
"approved_labelled_products.companies": "SOME"
}
}
}

请注意,由于实际上没有执行任何分析,因此请求区分大小写,并且按字符串 "some" 进行查询将不会返回结果。

text 字段有何不同?

text字段是 analyzed在索引期间,这意味着输入字符串被拆分为标记,小写,一些元信息被保存并且 inverted index已建成。

这允许有效地获取包含特定标记或标记组合的文档。

为了说明这一点,我们可以使用 _analyze API .让我们先看看 Elasticsearch 如何分析 keyword 字段的数据:

POST _analyze
{
"analyzer" : "keyword",
"text": "SOMETHING INC"
}

这将返回:

{
"tokens": [
{
"token": "SOMETHING INC",
"start_offset": 0,
"end_offset": 13,
"type": "word",
"position": 0
}
]
}

如您所见,它是一个全部为大写字母的标记。

现在让我们看看 standard 分析器做了什么(text 字段默认使用的分析器):

POST _analyze
{
"analyzer" : "standard",
"text": "SOMETHING INC"
}

它将返回:

{
"tokens": [
{
"token": "something",
"start_offset": 0,
"end_offset": 9,
"type": "<ALPHANUM>",
"position": 0
},
{
"token": "inc",
"start_offset": 10,
"end_offset": 13,
"type": "<ALPHANUM>",
"position": 1
}
]
}

如您所见,它产生了两个标记,都是小写的。


希望对您有所帮助!

关于elasticsearch - match_phrase_prefix 不返回 match_phrase 获得的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54938244/

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