尝试获取与字段ABC的值相匹配的文档。尝试了“必须”或“应该”查询,但未得到预期结果。有人能建议我应该尝试什么样的查询吗?使用HighLevelRestClient。
{
"bool" : {
"must" : [
{
"term" : {
"ABC" : {
"value" : "X1",
"boost" : 1.0
}
}
},
{
"term" : {
"ABC" : {
"value" : "Y1",
"boost" : 1.0
}
}
}
]
}
}
或
{
"bool" : {
"should" : [
{
"term" : {
"ABC" : {
"value" : "X1",
"boost" : 1.0
}
}
},
{
"term" : {
"ABC" : {
"value" : "Y1",
"boost" : 1.0
}
}
}
]
}
}
映射
{
"mappings": {
"properties": {
"ABC": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 2
}
}
},
条件工作正常。如果我只是反转条件并忽略字段值,那么我就会得到结果。
X1和Y1是精确的字段值(想想枚举)
BoolQueryBuilder x = QueryBuilders.boolQuery();
for (SomeEnum enum : enums) {
x.should(QueryBuilders.termQuery("ABC",enum.name());
}
Still query返回所有文档。这应该已将文档筛选为匹配的值
样本文档
{
"_index": "some_index",
"_type": "_doc",
"_id": "uyeuyeuryweoyqweo",
"_score": 1.0,
"_source": {
"A": true
"ABC": "X1"
"WS": "E"
}
},
{
"_index" : "some_index",
"_type" : "_doc",
"_id" : "uyeuyeuryweoyqweo1",
"_score" : 1.0,
"_source" : {
"A" : true,
"ABC" : "Y1",
"WS" : "MMM"
}
}
由于您没有提供映射,可能的原因是搜索时间标记与索引标记不匹配。
当您使用术语查询时,未按文档中所述进行分析
返回在提供的字段中包含确切术语的文档。
这意味着您在索引中的文档必须将确切的标记包含为X1
和Y1
,如果这些字段是text
字段并且您没有定义任何anlyzer而不是elasticsearch使用标准
分析器,其小写
标记,因此在索引中x1
和y1
将被存储并且没有任何匹配。
编辑:正如怀疑的那样,问题是由于术语
查询用于text
字段,下面的查询会给出预期的结果
{
"bool" : {
"should" : [
{
"term" : {
"ABC.keyword" : {
"value" : "X1",
"boost" : 1.0
}
}
},
{
"term" : {
"ABC.keyword" : {
"value" : "Y1",
"boost" : 1.0
}
}
}
]
}
}
对于多值字段,如下所示: 此查询返回我们在上面插入的文档: 有没有办法让弹性单独匹配列表中的每个项目?我想让文档匹配“银行”、“美国”、“银行”、“游戏”、“加拿大”,但不匹配“微软游戏” 我不想使用嵌套文档或脚本
我想要找到一个文件的名称包含'Bob',并有一个位置在'paducah'或'smyrna'。 以下是我现在所拥有的: 我知道问题出在location数组上,因为如果我将它改为一个没有数组的元素,那么查询就可以正常工作。 这是我能找到的最接近的答案。 它没有工作,我收到以下错误: [term]查询格式错误,应为[END_OBJECT],但找到[FIELD_NAME]
问题内容: 我想查询的数据是和是。编写常用的SQL很容易: 但是,对Elasticsearch进行查询对我来说并不容易。 首先,我查询了: 结果是我所期望的。 然后,我查询了: 它也运作良好。 但是我无法使用和操作将2个条件连接在一起的查询。如何将这两个匹配查询合并为一个使用和操作? 问题答案: 您需要的是布尔查询,您可以在其中输入所有单个查询: (我无法测试查询,这可能是错误的,但是bool-q
Elasticsearch允许通过其“more like this”(MLT)查询搜索类似文档。我正试图更好地理解和调整查询,以便更好地找到类似的文档。 在试验它时,我发现具有多个字段的单个MLT查询的结果与具有每个字段的多个MLT查询的布尔值产生不同的结果。以下样本(截断): 具有多个字段的单个MLT查询 具有单个字段的多个MLT查询 为什么会发生这种情况? 我知道MLT查询会将单个查询中列出的
问题内容: 我是ES的新手,我正在尝试建立一个查询,该查询将对多个字段使用phrase_prefix,因此我不必进行多次搜索。 这是到目前为止我得到的: 有人知道如何搜索多个字段,例如“ last_name”吗? 问题答案: 您正在使用的文本查询已被弃用(有效重命名),而改为使用match query 。匹配查询支持单个字段,但是您可以使用multi_match查询,该查询支持完全相同的选项并允许
我有一个elasticsearch索引用于存储关于人的信息。为了找到特定的人,我有一些查询,每个查询都单独工作,但是当我使用Bool查询将它们组合起来时,我会得到一个错误。 其中一个查询是对名称的模糊搜索 另一个查询用于搜索在特定日期范围内出生的人 现在我想组合这两个查询。我的bool查询: 虽然当我单独使用它们时,这两个查询都工作得很好,但当把它们组合起来时,我会得到一个错误。我的索引中有名字是