当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch反向match_phrase

丌官哲彦
2023-03-14

考虑以下文件:

{
  "Title": "Western Europe"
}

我想对标题字段运行这样的搜索查询

  • 西欧的苹果

我可以运行一个简单的匹配查询:

POST /_search
{
  "query": {
    "match": {
      "Title": "Apple in Western Europe"
    }
  }
}

显然,无论我使用哪个搜索短语,它都会匹配并将其带回来。但是我想做一个查询,只有当标题字段短语与我的搜索查询匹配时,它才会将我的文档带回来。这可能吗?是否有任何附加参数?这似乎是短语匹配的相反情况。

如果没有,我是否应该考虑使用带状疱疹重新建立数据索引

所以在这种情况下,运行这个(带有附加参数)不会得分并带回我的文档。

POST /_search
{
  "query": {
    "match": {
      "Title": "Apple in Eastern Europe"
    }
  }
}

tl;博士

如果文档的所有字段(我正在搜索的字段)标记都存在于我的搜索查询中,我如何编写一个查询来带回文档?例如,文档中的my字段仅包含这两个标记:

  • abc公司

如果我的搜索短语是Lorem ipsum dolor sit amet,concetetur adipising elit abc xyz,那么文档就会被带回来。

如果它是Lorem ipsum dolor sit amet,consecetur adipiscing elit xyz,它不会被带回来。

共有3个答案

史昱
2023-03-14

我知道Stefan在评论中给出了一个简单有效的解决方案,但您可能还想将Span Queries视为仅供参考!!

我创建了示例映射、文档、查询和响应:

PUT my_span_index
{
  "mappings": {
    "properties": {
      "Title":{
        "type": "text"
      }
    }
  }
}
POST my_span_index/_doc/1
{
  "Title": "Western Europe"
}

POST my_span_index/_doc/2
{
  "Title": "Eastern Europe"
}

//slop - distance between words Western and Europe here is 13
POST my_span_index/_doc/3
{
  "Title": "As far as Western culture is America, we see gradually more and more of the same in Europe"
}
POST my_span_index/_search
{
    "query": {
        "span_near" : {
            "clauses" : [
                { "span_term" : { "Title": "western" } },
                { "span_term" : { "Title": "europe" } }
            ],
            "slop" : 12,                                <---- Distance Between Words
            "in_order" : true                           <---- If order is important
        }
    }
}

请注意,我使用了Span附近

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 0.5420371,
    "hits" : [
      {
        "_index" : "my_span_index",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.5420371,
        "_source" : {
          "Title" : "Western Europe"
        }
      },
      {
        "_index" : "my_span_index",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 0.028773852,
        "_source" : {
          "Title" : "As far as Western culture is America, we see gradually more and more of the same in Europe"
        }
      }
    ]
  }
}

请注意,在响应中也会返回id为3的文档,但是如果将slop更改为较小的值,则不会显示该文档。

痛苦的是,如果您的请求将有更多的令牌,您最终会在应用程序端编写/生成长查询。

希望我能帮忙!!

汪驰
2023-03-14

尝试使用可以帮助您的不同参数的“间隔查询”。

https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-intervals-query.html

孙玺
2023-03-14

您可以使用Percolator查询(ES文档):

  1. 为要匹配的查询编制索引
  2. 与查询关联的元数据兼容
  3. 在搜索请求中发送文档
  4. 获取匹配的查询
  • query:接受一个ES查询,后面有所有的力量
  • 标题:元数据(可选)
PUT /my_index
{
    "mappings": {
        "properties": {
            "Title": {
                "type": "text"
            },
            "query": {
                "type": "percolator"
            }
        }
    }
}
PUT /my_index/_doc/1
{
  "query": {
    "match_phrase": {
      "Title": "Western Europe"
    }
  },
  "Title": "Western Europe"
}
POST /my_index/_search
{
    "query": {
        "percolate": {
            "field": "query",
            "document": {
                "Title": "Apple in Western Europe"
            }
        }
    }
}
 类似资料:
  • 参考阅读:什么是反向Shell 这篇教程将会教你使用Python编写一个反向shell,首先我们先演示使用Python如何利用web服务器的功能,把文件从另一台主机传送过来。我们假设你有一台傀儡主机,你现在想下载傀儡机上面的的文件。那么你就可以使用shell(或meterpreter)去访问这台傀儡机,你可以通过一行Python代码把傀儡机建立成为一个web服务器,然后下载傀儡机上面的文件. 创建

  • 问题内容: 我在寻找解决方案时遇到了麻烦。我正在尝试使用JS(或其他库)来制作它,以便当用户在鼠标滚轮上向下滚动时,页面以与通常相反的方式滚动。 基本上,我希望页面的底部首先显示,并且随着用户滚动,我希望屏幕的顶部向下显示。我能够找到的唯一示例是http://conduit.com/的右列。 我已经建立了一个JSFiddle并提供了一个示例来帮助对其进行可视化。我知道这可能与以下内容有关: 但老实

  • 问题内容: 我在给像这样的物体 如何将字符串转换回对象? 问题答案: 您需要字符串。

  • 什么是反向代理 反向代理(Reverse Proxy)方式是指用代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。 举个例子,一个用户访问 http://www.example.com/readme,但是 www.example.com 上并不存在

  • 卷积神经网络其实是神经网络特征学习的一个典型例子。传统的机器学习算法其实需要人工的提取特征,比如很厉害的SVM。而卷积神经网络利用模板算子的参数也用以学习这个特点,把特征也学习出来了。其实不同的模板算子本质上就是抽象了图像的不同方面的特征。比如提取边缘,提取梯度的算子。用很多卷积核去提取,那就是 提取了很多的特征。一旦把参数w,b训练出来,意味着特征和目标之间的函数就被确定。今天分享下CNN的关键

  • 反向代理是一个 V2Ray 的附加功能,可以把服务器端的流量向客户端转发,即逆向流量转发。 反向代理功能在 V2Ray 4.0+ 可用。目前处于测试阶段,可能会有一些问题。 反向代理的大致工作原理如下: 假设在主机 A 中有一个网页服务器,这台主机没有公网 IP,无法在公网上直接访问。另有一台主机 B,它可以由公网访问。现在我们需要把 B 作为入口,把流量从 B 转发到 A。 在主机 A 中配置一