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

Elasticsearch在没有嵌套的多值字段中匹配每个单独值的查询

蒋鹏鹍
2023-03-14

对于多值字段,如下所示:

PUT match_test
{
  "mappings": {
    "properties": {
      "companies": {
        "type": "text"
      }
    }
  }
}
POST match_test/_doc/1
{
  "companies": ["bank of canada", "japan games and movies", "microsoft canada"]
}

此查询返回我们在上面插入的文档:

GET match_test/_search
{
  "query": {
    "match": {
      "companies": {
        "query": "canada games",
        "operator": "and"
      }
    }
  }
}

有没有办法让弹性单独匹配列表中的每个项目?我想让文档匹配“银行”、“美国”、“银行”、“游戏”、“加拿大”,但不匹配“微软游戏”

我不想使用嵌套文档或脚本

共有1个答案

娄德运
2023-03-14

如果你想找到相距很远但仍然在同一个数组索引上的单词,那么你可以使用position_increment_gap。

创建映射时,将字段的position_increment_gap设置为100。Elasticsearch将在每个位置自动索引数组数据,在下一个索引处的数据位置为100。然后用99编写一个match_phrase查询。

PUT match_test 
{
  "mappings": {
    "properties": {
      "companies": {
        "type": "text",
        "position_increment_gap": 100
      }
    }
  }
}

GET match_test/_search
    {
      "query": {
        "match_phrase": {
          "companies": {
            "query": "japan movies",
            "slop":99
          }
        }
      }
    }

在这里阅读更多信息https://www.elastic.co/guide/en/elasticsearch/reference/current/position-increment-gap.html

 类似资料:
  • 尝试获取与字段ABC的值相匹配的文档。尝试了“必须”或“应该”查询,但未得到预期结果。有人能建议我应该尝试什么样的查询吗?使用HighLevelRestClient。 或 映射 条件工作正常。如果我只是反转条件并忽略字段值,那么我就会得到结果。 X1和Y1是精确的字段值(想想枚举) Still query返回所有文档。这应该已将文档筛选为匹配的值 样本文档

  • 我有一个如下所示的ElasticSearch查询: 和像这样的文件作对。 因此,我能够根据文档名称和搜索名称与我的查询的接近程度来检索文档。 要求是,文本搜索框应该检索与查询匹配的最接近的名称,但是,如果给定相对相似的名称,在过去的时间段内投诉数量超过10的文档在搜索结果中的显示应该高于那些少于10的文档。 因此,我需要传递一个时间段的关键字,例如“01/01/2001-31/12/2001”,如

  • Sup社区。我有个问题。我正在使用Elasticsearch 6.4 我的数据结构的一部分: 我需要得到按成本排序的文档desc,我需要排序dirs字段中的值date_by字段与nulls-first。 如何对嵌套字段内的值进行排序,而不按此嵌套字段对文档进行排序?

  • 问题内容: 我有这样一个表(myTable): 我想要一个查询,该查询返回每个记录,但是增加了一个列,该列包含orig_id与当前行的id相等的其他行的计数。 结果表如下所示: 我尝试了以下查询,但没有结果: 我怎样才能达到预期的效果? 问题答案: 您可以通过联接和聚合来做到这一点:

  • 我只需要对与查询匹配的嵌套对象上的值求和。看起来ElasticSearch确定与查询匹配的文档,然后对所有嵌套对象求和。从下面的大纲中,我想搜索嵌套对象。objtype=“A”并返回objvalue之和,仅用于匹配嵌套对象,我想得到值4。这可能吗?如果是,如何? 这是地图 这是我的文件 这是我的查询代码。

  • 在这里给ElasticSearch的初学者排名。 我有一个客户列表,他们的订单作为一个嵌套字段。假设文档结构如下: 我想查询的是:在两个日期之间订购了一定数量的用户列表。我希望能够将它与例如生日的范围查询结合起来。 我已经到了这样的地步,我可以使用聚合来获得每个订户在两个日期之间的排序总和: 但是,我想限制查询部分返回的结果,以便更好地与所有其他过滤器混合。 我的第一个想法是使用一个脚本过滤器,并