当前位置: 首页 > 面试题库 >

elasticsearch复杂方案

邓深
2023-03-14
问题内容

我是Elastic Search的新手。我的场景很复杂,无法为此找到正确的解决方案(弹性查询/参数)。任何帮助将不胜感激。

我的领域

  • 产品名称(字符串)
  • 价格最低
  • 最高价格
  • 可用性状态(可用/不可用)

除此以外,搜索始终将针对唯一用户进行过滤。所以Mysql查询看起来像:

Select * from product where product_name like %xxx% AND price >= price_min AND price <= price_max AND availability = availability_ status AND user = 1;

我喜欢精确的elasticsearch参数来解决这种情况,或者大约解决方案也将不胜感激。


问题答案:

您需要在此处使用过滤器,因为您需要完全匹配而不是全文匹配。而且这种方式甚至更快。

 {
  "query": {
    "filtered": { 
      "query": {
        "match": { "name": "YourName" }
      },
      "filter": {
        "bool": {
           "must": [ 
           { "range": { "price_min": { "gte": 20 }}},
           { "range": { "price_max": { "lte": 170 }}},
           { "term" : { "availability" : "false" }} ]
        }
      }
    }
  }
}

您在“您的姓名”中提供的是全文匹配项(如果对名称字段进行了分析,则将检索相似的名称)。我假设您保持不变,因此默认情况下会分析该字段(词干+停用词删除)。由于您需要结果来匹配所有条件,因此必须使用AND组合。因此使用

bool过滤所有AND项。



 类似资料:
  • 我使用Spring JPA规范来创建标准查询。我的代码如下所示: 我被告知这是一种糟糕的方法,我应该使用投影(DTO)从数据库中读取,因为创建实体并在之后映射它们很昂贵。问题是我不知道如何将规范与DTO相结合。要使用包含嵌套 DTO 和大量属性的复杂 DTO 来管理复杂和动态查询(来自用户输入的筛选器等)的最佳方式是什么?

  • 问题内容: 我目前正在基于这样的单行弹性查询(示例)在过滤中获取RDD : 现在,如果我们的搜索查询变得复杂,例如: 我是否仍可以将该查询转换为 嵌入式 弹性查询以与 esJsonRDD 一起使用?或者是有反正上面的查询仍可使用 的是 与 esJsonRDD ?如果没有,在Spark中获取此类RDD的更好方法是什么? 因为esJsonRDD似乎只接受内联(一行)弹性查询。 问题答案: 使用三引号:

  • 主要内容:时间复杂度,空间复杂度《 算法是什么》一节提到,解决一个问题的算法可能有多种,这种情况下,我们就必须对这些算法进行取舍,从中挑选出一个“最好”的。 算法本身是不分“好坏”的,所谓“最好”的算法,指的是最适合当前场景的算法。挑选算法时,主要考虑以下两方面因素: 执行效率:根据算法所编写的程序,执行时间越短,执行效率就越高; 占用的内存空间:不同算法编写出的程序,运行时占用的内存空间也不相同。如果实际场景中仅能使用少量的内

  • 问题内容: 从Scala 2.9版开始,存在一个方便的转换器,可以通过编写类似以下内容的方法从其他集合转换为Scala的数据结构: 这是一个可爱的小功能,因为它允许与现有Java代码进行交互时利用Scala的优势。 但是,我不确定所涉及的时间和空间复杂性,并且在官方文档中找不到任何内容,因此存在以下问题: 在哪里可以获得有关JavaConverters的复杂性(时间和空间)的信息? 问题答案: 各

  • 假设Oracle模式有以下表和列: 我有我的Elasticsearch文档,其中根元素是一个国家,它包含该国家的所有部门,而这些部门又包含各自部门的所有员工。 因此,文档结构如下所示: 我希望能够在每个表上运行单独的输入jdbc查询,并且每当基表中的数据被添加/更新/删除时,它们应该在elasticsearch文档中创建/更新/删除数据。 这是一个示例问题,实际的表和数据结构更加复杂。所以我不是在

  • 例如,我有点混淆这两个术语——合并排序、heapsort和插入排序的辅助空间是O(1),而合并排序、插入排序和heapsort的空间复杂度是O(n)。 所以,如果有人问我合并排序、堆排序或插入排序的空间复杂度是多少,我应该告诉他们O(1)还是O(n)? 另外,请注意,在选择排序的情况下,我已经阅读了它的空间复杂度是 O(1),这是辅助空间。 那么,使用“就地计算”的算法是否有可能,对于这些算法,我