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

ElasticSearch 7中的运算符

长孙宜
2023-03-14

我有一个关于Spring数据elasticSearch的项目。型号:

@Document(indexName = "house", createIndex = false)
public class House {
    @Id
    private String id;
    private String aoGuid;
    private String buildNum;
    private String houseGuid;
    private String houseId;
    private String houseNum;
    private String postalCode;
    private String regionCode;
}

存储库:

@Query("{\n" +
        "  \"bool\": {\n" +
        "    \"must\": [\n" +
        "      {\n" +
        "        \"bool\": {\n" +
        "          \"must\": [\n" +
        "            {\n" +
        "              \"terms\": {\n" +
        "                \"aoGuid\": \"[?0]\"\n" +
        "              }\n" +
        "            }\n" +
        "          ]\n" +
        "        }\n" +
        "      }\n" +
        "    ]\n" +
        "  }\n" +
        "}")
List<House> findByAoGuidIn(Collection<String> aoGuid);

我的弹性指数:

{
  "house": {
    "aliases": {},
    "mappings": {
      "properties": {
        "_class": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "aoGuid": {
          "type": "keyword"
        },
        "buildNum": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "houseGuid": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "houseId": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "houseNum": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "postalCode": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "regionCode": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        }
      }
    },
    "settings": {
      "index": {
        "search": {
          "slowlog": {
            "threshold": {
              "query": {
                "info": "1ms"
              }
            }
          }
        },
        "number_of_shards": "1",
        "provided_name": "house",
        "creation_date": "1582210642568",
        "number_of_replicas": "1",
        "uuid": "c43T1LthTH6LhTphjZ-Ulw",
        "version": {
          "created": "7040099"
        }
      }
    }
  }
}

当我调用findByAoGuide In方法时,我得到一个错误:

parsing_exceptionElasticsearch StatusException: Elasticsearch异常[type=elasticsearch-rest-high-level-client-7.4.0.jar,原因=[条款]查询不支持[aoGuid]]在org.elasticsearch.client.BytesRestRlient.performFromXContent(BytesRestRlient.java:1394)~[elasticsearch-rest-high-level-client-7.4.0.jar: 7.4.0]在org.elasticsearch.client.RestHighLevelClient.parse实体(RestHighLevelClient.java:1727)~[elasticsearch-rest-high-level-client-7.4.0.jar: 7.4.0]在org.elasticsearch.client.RestHighLevelClient.parse响应异常(RestHighLevelClient.java:1704)~[elasticsearch-rest-high-level-client-7.4.0.jar: 7.4.0]在org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1467)~[elasticsearch-rest-high-level-client-7.4.0.jar: 7.4.0]在org.elasticsearch.client.RestHighLevelClient.perform请求(RestHighLevelClient.java:1424)~[org.elasticsearch.: 7.4.0]在org.elasticsearch.rest.RestHighLevelCesponse.errorRequest estAndParseEntity(RestHighLevelCesponse.java:177)~[elasticsearch-7.4.0.jar: 7.4.0]

我从以下链接的文档中获取了一个查询:https://docs.spring.io/spring-data/elasticsearch/docs/4.0.x/reference/html/#elasticsearch.query-方法

如何修复错误?

共有1个答案

彭鸿彩
2023-03-14

谢谢@Val,你引导我走上了正确的思考之路。问题是我如何形成集合。我没有在我的问题中提供这一点。我张贴更正后的代码:

List<String> aoGuidList = new ArrayList<>();
it.getParts().forEach(itt -> {
    aoGuidList.add("\"" + itt.getAoGuid() + "\"");
});

queryHouseService.search(aoGuidList);

现在我的存储库:

@Query("{\n" +
        "  \"bool\": {\n" +
        "    \"must\": [\n" +
        "      {\n" +
        "        \"bool\": {\n" +
        "          \"must\": [\n" +
        "            {\n" +
        "              \"terms\": {\n" +
        "                \"aoGuid\": ?0\n" +
        "              }\n" +
        "            }\n" +
        "          ]\n" +
        "        }\n" +
        "      }\n" +
        "    ]\n" +
        "  }\n" +
        "}")
List<House> findByAoGuidIn(Collection<String> aoGuid);

实际上,我必须确保请求中的集合与模式[“val1”,“val2”]相对应。在我的错误版本中,我得到了一个表格集合:[val1,val2]或[“val1,val2”]

 类似资料:
  • 问题内容: 任何人都可以通过一些示例解释在Java中使用^运算符吗? 问题答案: 与大多数语言中的^相同,只是XOR。

  • 问题内容: 我最近从Apple 下载了 Advanced NSOperations 示例应用程序,并找到了此代码… 似乎使用了运算符来代替,但我从未见过。 它是什么? 问题答案: 它是用于语句中模式匹配的运算符。 您可以在这里了解一下如何使用和利用它来提供自己的实现: http://oleb.net/blog/2015/09/swift-pattern-matching/ http://austi

  • 问题内容: 什么是运营商吗?例如,以下操作做什么? 问题答案: 它是右移操作符,将所有位向右“移动”一次。 二进制10是 1010 移到右边变成 0101 这是5

  • 问题内容: 在“ Swift编程语言”一书(第599页)中,我遇到了使我感到困惑的这段代码。它是这样的: 其解释是: buyFavoriteSnack(_ :)函数查找给定人员的最爱小吃,并尝试为他们购买。如果他们没有列出最喜欢的小吃,它会尝试购买糖果。如果他们… 该解释如何映射到“ ??” 给定代码中的运算符。我们何时/应该在自己的代码中使用此语法? 问题答案: 它是“零合并运算符”(也称为“默

  • 问题内容: 考虑以下代码: 到底为什么呢? 我会这样计算: 但这是3。我不明白为什么在预先增加到时第二次不进行增加。 问题答案: 让我们首先关注看起来异常的行: 此处的运算符是(分配),(一元加号)和(预递增)。没有操作员。Java将其解释为两个运算符:和。添加适当的空格会更清楚: 现在让我们分析处理过程: 第一次迭代:和是。 预先增加到,这就是的结果。一元不执行任何操作,而是分配给。然后出现迭代

  • 问题内容: 有人可以向我解释为什么可以这样做: 没有操作符重载怎么办(在这种情况下为“ =“) 我来自C ++背景,因此可以解释… 问题答案: 在这种情况下,没有过载。与不同的Java片段是的定义-Java编译器将“”中的任何内容转换为,因此在您的示例中也是一个简单的赋值。在中,编译器将“”转换为,因此需要从转换为。

  • 当我运行这段代码时,我得到以下错误截图 50:7:错误:与“操作员”不匹配

  • 问题内容: 此方法搜索第一组单词字符(即),返回第一个匹配的组或出现故障的情况。 相同的函数可以重写为: 这是相同的,并且已记录为行为。作为此页中明确指出: 表达式首先计算; 如果为假,则返回其值;否则,将求值并返回结果值。 但是,作为布尔运算符(甚至在手册中也是如此),我希望返回一个布尔值。结果,当我发现这是如何工作时,我感到非常惊讶。 有什么其他用例,和/或这种不太直观的实现的原理是什么? 问