在elasticsearch上查找具有空字符串值的文档

我一直在尝试使用elasticsearch过滤仅在正文中包含空字符串的那些文档。到目前为止,我还没有运气。

在继续之前,我要提到的是,我已经尝试过遍及Interwebz和StackOverflow 的 “解决方案”。

因此,以下是我要运行的查询,其后是对应的查询:

{

"query": {

"filtered":{

"filter": {

"bool": {

"must_not": [

{

"missing":{

"field":"_textContent"

}

}

]

}

}

}

}

}

我也尝试了以下方法:

 {

"query": {

"filtered":{

"filter": {

"bool": {

"must_not": [

{

"missing":{

"field":"_textContent",

"existence":true,

"null_value":true

}

}

]

}

}

}

}

}

以及以下内容:

   {

"query": {

"filtered":{

"filter": {

"missing": {"field": "_textContent"}

}

}

}

}

以上都不起作用。当我确定有包含空字符串字段的记录时,我得到一个空结果集。

如果有人能为我提供任何帮助,我将非常感谢。

谢谢!

回答:

如果您使用默认的分析器(standard),则没有任何内容可以分析它是否为空字符串。因此,您需要逐字索引字段(未分析)。这是一个例子:

添加一个映射,该映射将为未标记的字段建立索引,如果您还需要索引的字段的标记化副本,则可以使用“

多字段”类型。

PUT http://localhost:9200/test/_mapping/demo

{

"demo": {

"properties": {

"_content": {

"type": "string",

"index": "not_analyzed"

}

}

}

}

接下来,索引几个文档。

/POST http://localhost:9200/test/demo/1/

{

"_content": ""

}

/POST http://localhost:9200/test/demo/2

{

"_content": "some content"

}

执行搜索:

POST http://localhost:9200/test/demo/_search

{

"query": {

"filtered": {

"filter": {

"term": {

"_content": ""

}

}

}

}

}

返回带有空字符串的文档。

{

took: 2,

timed_out: false,

_shards: {

total: 5,

successful: 5,

failed: 0

},

hits: {

total: 1,

max_score: 0.30685282,

hits: [

{

_index: test,

_type: demo,

_id: 1,

_score: 0.30685282,

_source: {

_content: ""

}

}

]

}

}

以上是 在elasticsearch上查找具有空字符串值的文档 的全部内容, 来源链接: utcz.com/qa/433841.html

回到顶部