gpt4 book ai didi

Elasticsearch 过滤器中的短语匹配

转载 作者:行者123 更新时间:2023-12-04 05:46:43 25 4
gpt4 key购买 nike

我有一个查询,可以按给定的时间间隔搜索文本字段中的给定术语。我想向此查询添加短语匹配,如何添加;例如,我将查找“hasparti”作为短语,但文本不应包含“ahmet”一词。我怎样才能做到这一点;代码在这里;

{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"terms": {
"text": [
"has",
"parti"
]
}
},
{
"range": {
"date": {
"gt": "2015-08-27",
"lte": "2015-08-28"
}
}
}
]
}
}
}
}
}

最佳答案

Elasticsearch 提供 Phrase matching ,但我认为你不能在 filter 中使用它,或者至少我没能让它发挥作用。我有一个解决方案,在查询中使用match_phrase,以及text不包含ahmet的条件,而时间间隔保留在过滤器中。检查它是否适合您。

{
"query": {
"filtered": {
"query": {
"bool": {
"must": [
{
"match_phrase": {
"text": "has parti"
}
}
],
"must_not": [
{
"match": {
"text": "ahmet"
}
}
]
}
},
"filter": {
"bool": {
"must": [
{
"range": {
"date": {
"gt": "2015-08-27",
"lte": "2015-08-28"
}
}
}
]
}
}
}
}
}

顺便说一句,您的日期看起来像是被映射为字符串,因为否则您的请求将失败并显示

ElasticsearchParseException[failed to parse date field [2015-08-22], tried both date format [date_time], and timestamp number]; nested: IllegalArgumentException[Invalid format: \"2015-08-22\" is too short]; }]

我建议使用正确的映射,但这与您的问题并不真正相关

更新:

刚刚回来补充一下we did the right thing :过滤器不适用于全文搜索

更新:

the filtered query has been deprecated ,在新版本中应该重写查询,以便将过滤器移动到 bool 查询中:

{

"query": {
"bool": {
"must": [{
"match_phrase": {
"text": "has parti"
}
}],
"must_not": [{
"match": {
"text": "ahmet"
}
}],
"filter": {
"bool": {
"must": [{
"range": {
"date": {
"gt": "2015-08-27",
"lte": "2015-08-28"
}
}
}]
}
}
}
}

}

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

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