标签: elasticsearch-query

Elasticsearch:批量搜索可能吗?

我知道有批量索引操作的支持.但搜索查询是否也可以这样做?我想发送许多不同的无关查询(进行精确/召回测试),使用批量查询可能会更快

elasticsearch elasticsearch-dsl elasticsearch-query

10
推荐指数
1
解决办法
4743
查看次数

Elasticsearch Go嵌套查询

我正在使用olivere的弹性Go库来运行弹性查询 - https://godoc.org/github.com/olivere/elastic#NestedQuery

我正在尝试查询的数据如下所示:

                "_source": {
                    "field1": "randVal1",
                    "field2": "randVal2",
                    "nestedfield": {
                        "ind1": "val1"
                    }
                }
Run Code Online (Sandbox Code Playgroud)

我正在尝试nestedfield使用NestedQueryElastic Go库中的调用运行查询,如下所示:

aquery := elastic.NewTermQuery("ind1", "val1")
query := elastic.NestedQuery("nestedfield", aquery)
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误说明:

转换为NestedQuery的参数太多了

我试图检索所有的文件,其中ind1nestedfieldval1.非常感谢构建此查询的任何帮助.

编辑:

我将其更改为NewNestedQuery,现在它没有给出错误.但是,它不会返回任何结果,即使该文档存在于索引中并且我能够查询非嵌套字段.

我试过这个:

aquery := elastic.NewTermQuery("ind1", "val1")
query := elastic.NewNestedQuery("nestedfield", aquery)
Run Code Online (Sandbox Code Playgroud)

还有这个:

query := elastic.NewNestedQuery("nestedfield", elastic.NewMatchQuery("nestedfield.ind1", "val1"))
Run Code Online (Sandbox Code Playgroud)

但他们都给出了0结果.知道我做错了什么吗?

编辑#2

映射是:

"field1": { "type": "string" },
"field2": { "type": "string" },
"nestedfield": {
                    "type": "nested"
                }
Run Code Online (Sandbox Code Playgroud)

最终起作用的是:

query := elastic.NewMatchQuery("nestedfield.ind1", "val1")
Run Code Online (Sandbox Code Playgroud)

我能够在'nestedfield'中添加其他字段并执行以下查询: …

go elasticsearch elasticsearch-plugin elasticsearch-query

10
推荐指数
1
解决办法
1141
查看次数

边缘NGram与短语匹配

我需要自动完成短语.例如,当我搜索"alz痴呆症"时,我想得到"阿尔茨海默氏症的老年痴呆症".

为此,我配置了Edge NGram tokenizer.我在查询体中尝试了两个edge_ngram_analyzerstandard作为分析器.然而,当我试图匹配一个短语时,我无法得到结果.

我究竟做错了什么?

我的查询:

{
  "query":{
    "multi_match":{
      "query":"dementia in alz",
      "type":"phrase",
      "analyzer":"edge_ngram_analyzer",
      "fields":["_all"]
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我的映射:

...
"type" : {
  "_all" : {
    "analyzer" : "edge_ngram_analyzer",
    "search_analyzer" : "standard"
  },
  "properties" : {
    "field" : {
      "type" : "string",
      "analyzer" : "edge_ngram_analyzer",
      "search_analyzer" : "standard"
    },
...
"settings" : {
  ...
  "analysis" : {
    "filter" : {
      "stem_possessive_filter" : {
        "name" : "possessive_english",
        "type" : …
Run Code Online (Sandbox Code Playgroud)

elasticsearch elasticsearch-mapping elasticsearch-query

9
推荐指数
2
解决办法
6099
查看次数

是否可以在Elasticsearch查询中添加注释?

是否可以对Elasticsearch查询JSON发表评论?我希望能够在查询中添加一些额外的文本,这些文本是人类可读但被Elasticsearch忽略的.

例如,如果我有以下查询:

{ "query": { "match_all": {} } }
Run Code Online (Sandbox Code Playgroud)

我希望能够添加评论,也许是这样的:

{ "query": { "match_all": {} }, "comment": "This query matches all documents." }
Run Code Online (Sandbox Code Playgroud)

Hacky解决方法(例如,对结果没有影响的查询子句)也将受到赞赏.

elasticsearch elasticsearch-query elasticsearch-5

8
推荐指数
2
解决办法
2603
查看次数

如何在 Elasticsearch 中对关键字字段进行不区分大小写的搜索而不重新建立索引?

我有一个这样的关键字字段:

"address": {
   "type": "keyword"
}
Run Code Online (Sandbox Code Playgroud)

该值以驼峰式大小写形式编写,因为它是用于显示的。例如“1/10 某处路,某处 AAA 3333”

现在,我想对该字段进行不区分大小写的搜索,最好不要重新索引整个索引

到目前为止我发现它match可以用于不区分大小写的搜索,但仅适用于text字段。

我唯一的选择是重新索引,例如通过text字段或使用小写/自定义标准化器/分析器?有什么办法可以在不重新索引的情况下做到这一点?

elasticsearch elasticsearch-query

8
推荐指数
1
解决办法
1万
查看次数

在elasticsearch中搜索字幕数据

有以下数据(简单的srt)

1
00:02:17,440 --> 00:02:20,375
Senator, we're making our final

2
00:02:20,476 --> 00:02:22,501
approach into Coruscant.

...
Run Code Online (Sandbox Code Playgroud)

在 Elasticsearch 中索引它的最佳方法是什么?现在有一个问题:我希望搜索结果突出显示链接到时间戳指示的确切时间。此外,还有多个 srt 行重叠的短语(例如final approach在上面的示例中)。

我的想法是

  • 将 srt 文件索引为列表类型,时间戳是索引。我相信这不会匹配重叠多个键的短语
  • 创建仅索引文本部分的自定义标记器。我不确定elasticsearch 能在多大程度上突出显示原始内容。
  • 仅索引文本部分并将其映射回弹性搜索之外的时间戳

或者还有另一种选择可以优雅地解决这个问题吗?

elasticsearch elasticsearch-model elasticsearch-mapping elasticsearch-query

7
推荐指数
1
解决办法
411
查看次数

术语与术语查询的评分不同

我通过过滤和使用term查询来应用分数来检索文档。查询应匹配具有指定颜色的所有动物 - 匹配的颜色越多,文档的分数越高。奇怪的是,term查询terms结果却有不同的评分。

{
    "query": {
        "bool": {
            "should": [
                {"terms": {"color": ["brown","darkbrown"] } },
            ]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

应该和使用一样

{"term": {"color": {"value": "brown"} } },
{"term": {"color": {"value": "darkbrown"} } }
Run Code Online (Sandbox Code Playgroud)

查询编号 无论 1 个或 2 个术语匹配,1 都会为文档提供完全相同的分数。如果匹配更多颜色,后者当然会返回更高的分数。

正如协调因子所述,如果匹配的术语越多,返回的分数应该越高。因此,这两个查询应该产生相同的分数 - 或者是因为term查询不分析搜索词?

我的字段被索引为文本。字符串被索引为字符串的“数组”,例如"brown","darkbrown"

elasticsearch elasticsearch-query term-query

7
推荐指数
1
解决办法
6871
查看次数

Elasticsearch 中的 match 和 bool 必须匹配查询有什么区别

ES中Only match和bool必须匹配查询有什么区别?

首先,仅使用匹配查询

{
   "query":{
      "match":{
         "address":"mill"
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

二、使用复合查询

{
  "query": {
    "bool": {
      "must": [
        { "match": { "address": "mill" } }
      ]
     }
   }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

你能告诉我一切吗?他们之间有什么区别?

elasticsearch booleanquery elasticsearch-query

7
推荐指数
1
解决办法
9644
查看次数

Elasticsearch Aggregation:每个父母最新孩子的总和

具有Elasticsearch代表一个亲子结构orderorder_revision孩子我要生成的直方图price显示的总和quantity.

{
  "_type": "order",
  "_id": "1063220887",
  "_score": 1,
  "_source": {
    "order_id": "1063220887",
    "product_id": "10446350",
    "timestamp": 1462713302000
  }
}

{
  "_type": "order_revision",
  "_id": "10234234",
  "_parent": "1063220887",
  "_source": {
    "price": 9,
    "quantity": 3,
    "revision": 361,
    "timestamp": 1462712196000
  }
}
Run Code Online (Sandbox Code Playgroud)

以下聚合基本上有效,但返回所有现有修订的总和.

  {
    "aggs": {
      "orders": {
        "filter": {
          "has_parent": {
            "parent_type": "order"
          }
        },
        "aggs": {
          "quantity_per_price": {
            "histogram": {
              "field": "price",
              "interval": 1
            }
            "aggs": {
              "sum": {"field": quantity"}
            }
          }
        }
      }
    } …
Run Code Online (Sandbox Code Playgroud)

elasticsearch elasticsearch-dsl elasticsearch-query elasticsearch-aggregation elasticsearch-5

6
推荐指数
1
解决办法
165
查看次数

Elasticsearch default_operator "AND" 未按预期工作

我已经使用“AND”默认运算符设置了我的查询字符串搜索。我的查询如下:

{
    "query": {
        "query_string" : {
            "query" : "Adam KT2 7AJ",
            "default_operator" : "AND"
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望这能提供与下面相同的结果......但事实并非如此。

{
    "query": {
        "query_string" : {
            "query" : "Adam AND KT2 AND 7AJ",
            "default_operator" : "OR"
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

虽然我看到 default_operator 对我的搜索结果产生了影响,但它并没有像我希望的那样工作。

例如:

查询 1:

  • Adam AND KT2 AND 7AJ, default_operator: or
  • 结果:1(如预期)
  • [1] 姓名:Adam Lambert,邮政编码 KT2 7AJ

查询2:

  • Adam KT2 7AJ, default_operator: and
  • 结果:0
  • (不是预期的。这应该产生与上面相同的结果?似乎anddefault_operator 在查询中产生与 AND 不同的结果)

查询3:

  • KT2 7AJ, default_operator: and
  • 结果:2
  • (正如预期的那样,只匹配邮政编码的两个部分) …

elasticsearch elasticsearch-dsl elasticsearch-query

6
推荐指数
1
解决办法
380
查看次数