我只用项过滤器下面的弹性搜索查询。 我查询要复杂得多,但我只是想在这里显示的问题。
{
"filter": {
"term": {
"field": "update-time"
}
}
}
当我通过在一个连字符值过滤器,我得到任何结果回来。 但是,如果我尝试没有unhyphenated值,我得到返回结果。 我不知道,如果连字符是一个问题在这里,但我的情况使我相信如此。
有没有一种方式来逃避连字符,因此过滤器会返回结果? 我试图逃避与我从Lucene的论坛上阅读,但没有帮助反斜杠连字符。
另外,如果我传递一个GUID值到这个领域是复姓,并通过大括号,像包围 - {ASD23-34SD-DFE1-42FWW},将我需要为小写字母字符,我需要逃脱大括号呢?
谢谢
我猜想,你的领域进行分析,这是在elasticsearch字符串字段的默认设置。 其结果是,当索引它不是索引为一个术语“更新时间”,而是作为2项:“更新”和“时间”。 这就是为什么你的搜索项搜索找不到这个词。 如果你的领域将始终包含将具有完全的是要匹配的值,这将是最好的映射来定义这种现场不进行分析。 您可以通过重新创建新的映射指数做到这一点:
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"
}
}
}'
请记住,如果你的分析,然后场该记录将通过搜索只是单词“修改”或“时间”一词也被发现。
接受的答案并没有为我用弹性工作6.1。 我解决它使用“关键字”字段弹性提供了默认的字符串字段。
{
"filter": {
"term": {
"field.keyword": "update-time"
}
}
}
基于通过回答@imotov如果你使用的弹簧数据elasticsearch那么所有你需要做的就是标记您的领域为:
@Field(type = FieldType.String, index = FieldIndex.not_analyzed)
代替
@Field(type = FieldType.String)
问题是你需要尽管删除索引,并与新的映射重新实例化。