弹性搜索连字符的问题与长期滤波器(Elastic Search Hyphen issue with

2019-06-26 10:26发布

我只用项过滤器下面的弹性搜索查询。 我查询要复杂得多,但我只是想在这里显示的问题。

{
    "filter": {
            "term": {
                    "field": "update-time"
                }
        }
}

当我通过在一个连字符值过滤器,我得到任何结果回来。 但是,如果我尝试没有unhyphenated值,我得到返回结果。 我不知道,如果连字符是一个问题在这里,但我的情况使我相信如此。

有没有一种方式来逃避连字符,因此过滤器会返回结果? 我试图逃避与我从Lucene的论坛上阅读,但没有帮助反斜杠连字符。

另外,如果我传递一个GUID值到这个领域是复姓,并通过大括号,像包围 - {ASD23-34SD-DFE1-42FWW},将我需要为小写字母字符,我需要逃脱大括号呢?

谢谢

Answer 1:

我猜想,你的领域进行分析,这是在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"
        }
    }
}'

请记住,如果你的分析,然后场该记录将通过搜索只是单词“修改”或“时间”一词也被发现。



Answer 2:

接受的答案并没有为我用弹性工作6.1。 我解决它使用“关键字”字段弹性提供了默认的字符串字段。

{
    "filter": {
            "term": {
                    "field.keyword": "update-time"
                }
        }
}


Answer 3:

基于通过回答@imotov如果你使用的弹簧数据elasticsearch那么所有你需要做的就是标记您的领域为:

@Field(type = FieldType.String, index = FieldIndex.not_analyzed)

代替

@Field(type = FieldType.String)

问题是你需要尽管删除索引,并与新的映射重新实例化。



文章来源: Elastic Search Hyphen issue with term filter