elasticsearch - elasticsearch匹配精确词

标签 elasticsearch

我正在elasticsearch中使用Enron-dataset
邮件正文分为多个段落,这些段落存储为嵌套文档。但是,除此之外,我只想让您理解查询本身。
我想验证一切是否按预期进行,因此我在语料库中查找了一个不常见的词,并希望对其进行查询。我的目的是检查总命中值是否正确。我很困惑,因为我总是得到10000的值,这个值已经很高了。
我选择了单词electrons,它在语料库中多次出现。但是,我的查询还匹配了语料库中几乎所有邮件中包含的electronic(我夸大了)。
这是我的查询:

curl -X GET "localhost:9200/enron/_search?pretty" -H 'Content-Type: application/json' -d'
{
  "_source": {
    "includes": [ "*" ],
    "excludes": [ "body" ]
  },
  "query": {
    "nested": {
      "path": "body",
      "inner_hits": {       

      },
      "query": {
        "constant_score" : {
            "filter": {
                "match": {
                    "body.content" : "electrons" 
                }
            }
        }
      }
    }
  }
}
'


不要介意周围的所有内容。看起来像这样,因为我只对包含单词electrons的段落感兴趣。这已经是一个测试查询,用于了解幕后情况。它返回文档,并且仅返回具有匹配术语的内部文档(正文)。
我怀疑match过滤器是罪魁祸首。所以我将过滤器中的查询更改为match_phrase。但是,这并没有改变任何东西。

如何在文本字段(嵌套文档中)中匹配单词electrons而又不匹配electronic和其他类似单词?

编辑:
建议不要将“Term query”建议用于“文本”字段。旁白,它错误地返回了0个匹配:
{
  "_source": {
    "includes": [ "*" ],
    "excludes": [ "body" ]
  },
  "query": {
    "nested": {
      "path": "body",
      "inner_hits": {       

      },
      "query": {
        "constant_score" : {
            "filter": {
                "term": {
                    "body.content" : "electrons" 
                }
            }
        }
      }
    }
  }
}
'
{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 0,
      "relation" : "eq"
    },
    "max_score" : null,
    "hits" : [ ]
  }
}

编辑2:
我想我已经找到错误了。将分析器的文本字段设置为snowball。难怪它没有找到与该词完全匹配的词。
我正在重新编制索引。

编辑3:
这都是我的错。它可以与标准分析仪一起使用。顺便说一下,ES还使用match找到了正确的文档。

最佳答案

使用字词过滤器代替完全匹配的单词,请参见下面的说明

What is the difference between a term query and a match one?

关于elasticsearch - elasticsearch匹配精确词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59251258/

相关文章:

ruby-on-rails - 在 CircleCI 中设置 Elasticsearch 和 Ruby on Rails

ruby-on-rails - Elasticsearch + 轮胎 : good strategy to mock ES

elasticsearch - 如何使用elasticsearch在logstash中映射geoip字段,以便在Kibana4的平铺 map 中显示它

ElasticSearch Edge NGram 与前缀查询

elasticsearch - 从elasticsearch中的索引中仅获取过滤后的嵌套对象

elasticsearch - 在Elasticsearch搜索中,GET请求的查询字符串参数和POST请求的 “Query DSL”在功能上是否等效?

javascript - 如何获取 Elasticsearch 中嵌套对象的数组计数

python - 如何使用 API key 和 python 库正确连接到 Elasticsearch 云?

scala - ElasticSearch:使用代码中的查询更改字段值

ElasticSearch 在文档插入时运行脚本(插入 API)