首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用术语过滤器的Elastic Search Hyphen问题

使用术语过滤器的Elastic Search Hyphen问题
EN

Stack Overflow用户
提问于 2012-07-20 02:12:14
回答 3查看 37.5K关注 0票数 56

我有下面的Elastic Search查询,只有一个术语筛选器。我的查询要复杂得多,但我只是想在这里展示问题。

代码语言:javascript
复制
{
    "filter": {
            "term": {
                    "field": "update-time"
                }
        }
}

当我将一个用连字符连接的值传递给过滤器时,我得到的结果为零。但是,如果我尝试不使用无连字符的值,我会得到结果。我不确定连字符在这里是否是一个问题,但我的方案让我相信是这样的。

有没有办法转义连字符,以便过滤器返回结果?我试着用一个反斜杠来转义连字符,这是我在Lucene论坛上读到的,但是没有用。

另外,如果我将一个GUID值传入这个用连字符连接并用大括号括起来的字段,例如- {ASD23-34SD-DFE1-42FWW},我是否需要将字母表字符小写,是否也需要转义大括号?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-20 02:38:25

我猜你的字段已经被分析了,这是elasticsearch中字符串字段的默认设置。因此,当它被索引时,它不会被索引为一个术语“更新时间”,而是作为两个术语:“更新”和“时间”。这就是为什么您的术语搜索找不到此术语的原因。如果您的字段始终包含必须按原样完全匹配的值,最好在映射中将此类字段定义为未分析字段。可以通过使用新映射重新创建索引来完成此操作:

代码语言:javascript
复制
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"
        }
    }
}'

或者,如果您希望根据此字段查找记录时具有一定的灵活性,则可以保持对此字段的分析,而改用文本查询:

代码语言:javascript
复制
curl -XPOST http://localhost:9200/your-index/your-type/_search -d'{
    "query": {
        "text": {
                "field": "update-time"
        }
    }
}'

请记住,如果您的字段被分析,则只需搜索单词"update“或单词"time”即可找到此记录。

票数 88
EN

Stack Overflow用户

发布于 2018-01-29 22:09:03

在elastic 6.1中,公认的答案对我不起作用。我用elastic在字符串字段上默认提供的"keyword“字段解决了这个问题。

代码语言:javascript
复制
{
    "filter": {
            "term": {
                    "field.keyword": "update-time"
                }
        }
}
票数 37
EN

Stack Overflow用户

发布于 2016-09-14 19:13:38

根据@imotov的回答,如果您使用的是spring-data-elasticsearch,那么您需要做的就是将您的字段标记为:

代码语言:javascript
复制
@Field(type = FieldType.String, index = FieldIndex.not_analyzed)

而不是

代码语言:javascript
复制
@Field(type = FieldType.String)

问题是您需要删除索引,并使用新的映射重新实例化它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11566838

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档