我有以下弹性搜索查询只有一个术语过滤器。我的问题要复杂得多,但我只是想在这里展示这个问题。
{
"filter": {
"term": {
"field": "update-time"
}
}
}
当我将一个连字符的值传递给过滤器时,返回的结果为零。但如果我尝试不使用未被忽略的值,我会得到结果。我不确定连字符在这里是否是一个问题,但我的场景让我相信这一点。
有没有办法跳过连字符,这样过滤器就会返回结果?我曾试图用反斜杠来逃避连字符,这是我从Lucene论坛上读到的,但没有用。
此外,如果我将GUID值传递到这个字段中,该字段用连字符连接并用大括号括起来,比如-{ASD23-34SD-DFE1-42FWW},我是否需要将字母表字符小写,是否也需要将大括号转义?
谢谢
根据@imotov的答案,如果您使用sping-data-elasticsearch,那么您所需要做的就是将您的字段标记为:
@Field(type = FieldType.String, index = FieldIndex.not_analyzed)
而不是
@Field(type = FieldType.String)
问题是您需要删除索引,并使用新映射重新实例化它。
对于弹性6.1,被接受的答案不适用于我。我使用elastic默认为字符串字段提供的“关键字”字段解决了这个问题。
{
"filter": {
"term": {
"field.keyword": "update-time"
}
}
}
我猜您的字段已被分析,这是elasticsearch中字符串字段的默认设置。因此,当它索引时,它不是作为一个术语“更新时间”索引的,而是作为两个术语:“更新”和“时间”索引的。这就是您的术语搜索无法找到此术语的原因。如果您的字段始终包含必须完全匹配的值,那么最好在映射中将此类字段定义为未分析。可以通过使用新映射重新创建索引来执行此操作:
curl -XPUT http://localhost:9200/your-index -d '{
"mappings" : {
"your-type" : {
"properties" : {
"field" : { "type": "string", "index" : "not_analyzed" }
}
}
}
}'
curl -XPUT http://localhost:9200/your-index/your-type/1 -d '{
"field" : "update-time"
}'
curl -XPOST http://localhost:9200/your-index/your-type/_search -d'{
"filter": {
"term": {
"field": "update-time"
}
}
}'
或者,如果您希望在基于此字段查找记录时具有一定的灵活性,可以继续分析此字段,并改用文本查询:
curl -XPOST http://localhost:9200/your-index/your-type/_search -d'{
"query": {
"text": {
"field": "update-time"
}
}
}'
请记住,如果你的字段被分析,那么这个记录也会通过搜索单词“更新”或单词“时间”来找到。
我正在尝试在Elastic 2中创建一个过滤索引别名。十、 以下是所有青少年的资料,不分性别。我只想在这个过滤器里看到雌性。 这就是我试图创建索引别名的原因: 我看了这个问题,似乎是相同的答案,但是我的JSON一定有问题。 Elasticsearch将范围和术语连接到相同的数组项
问题内容: 我只有一个词过滤器,下面的elasticsearch查询。我的查询要复杂得多,但我只是想在此处显示问题。 当我将带连字符的值传递给过滤器时,返回的结果为零。但是,如果我尝试不使用未连接的值,则会得到结果。我不确定连字符是否在这里成为问题,但是我的情况使我相信。 有没有办法避免连字符,以便过滤器返回结果?我曾尝试从Lucene论坛上读到带有反斜杠的转义符,但这无济于事。 另外,如果我将G
由于已经有很多关于连字符的问题,我已经尝试了以下解决方案: 使用字符筛选器:ElasticSearch-在名称中使用连字符进行搜索。 所以我做了这个映射: 所以char筛选器似乎没有在搜索字符串上执行?我该怎么做才能让它起作用?
我在布尔查询中有一个筛选器问题。 我想应用一个基于3个字段的筛选器,其中至少有1个筛选器匹配: 我在这个查询中没有得到任何结果,但是我在索引中看到了很多相关的文档。 Opster Elasticsearch忍者测试: 例如你向我提出的1个例子,我有许多返回的结果。 然而,当我想对对象字段执行必须查询时,我没有得到与筛选器完美匹配的相同结果。 这里有一个例子: 仅使用must子句进行搜索 首先出现的
基数聚合计算不同值的近似计数。但是,为什么即使对于存储在单个碎片中的索引,它也显示不正确的值呢?
早些时候,我在我的应用程序中使用TransportClient。最近转向AWS管理弹性搜索服务。了解到AWS管理的ES群集不支持TransportClient。 因此,将代码迁移到使用BulkProcessort将文档插入ES的地方。当我重构代码作为ES留档的一部分时,我添加了这一行。 我在client::bulkAsync上得到一个错误,说client不是功能接口。 需要帮助理解我做错了什么。