我只有一个词过滤器,下面的elasticsearch查询。我的查询要复杂得多,但我只是想在此处显示问题。
{ "filter": { "term": { "field": "update-time" } } }
当我将带连字符的值传递给过滤器时,返回的结果为零。但是,如果我尝试不使用未连接的值,则会得到结果。我不确定连字符是否在这里成为问题,但是我的情况使我相信。
有没有办法避免连字符,以便过滤器返回结果?我曾尝试从Lucene论坛上读到带有反斜杠的转义符,但这无济于事。
另外,如果我将GUID值传递给带有连字符并用花括号括起来的该字段,则类似-{ASD23-34SD- DFE1-42FWW}的代码,我需要小写字母字符并且需要转义大括号呢?
谢谢
我想您的字段已经过分析,这是elasticsearch中字符串字段的默认设置。结果,当它被索引时,它不是被索引为一个术语“ update- time”,而是被索引为两个术语:“ update”和“ time”。这就是为什么您的术语搜索找不到该术语的原因。如果您的字段将始终包含必须完全匹配的值,那么最好在映射中将此类字段定义为未分析。您可以通过使用新映射重新创建索引来做到这一点:
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" } } }'
请记住,如果对您的字段进行了分析,那么只需搜索单词“ update”或单词“ time”,即可找到该记录。