当我在未分析的字段中包含双美元符号时,我遇到了问题。当我使用以下命令检查类型的映射时:
curl -XGET 'http://localhost:9200/documents/_mapping/document'
我得到了代码字段的输出:
{
"documents": {
"mappings": {
"document": {
"properties": {
"code": {
"index": "not_analyzed",
"type": "string"
},
// More field mappings
如果我使用以下命令测试映射:
curl -XGET 'http://localhost:9200/documents/_analyze?field=code' -d "ABC$"
我得到以下输出:
{"tokens":[{"token":"ABC$","start_offset":0,"end_offset":4,"type":"word","position":1}]}
这没关系,因为令牌与在命令中输入的数据具有相同的值。问题是当我使用这样的双美元符号时:
curl -XGET 'http://localhost:9200/documents/_analyze?field=code' -d "ABC$$"
然后我得到以下标记:
{"tokens":[{"token":"ABC4088","start_offset":0,"end_offset":7,"type":"word","position":1}]}
看起来双美元符号被数字4088取代。根据文档,not_analyzed index属性意味着:
索引此字段,因此可以搜索,但将指定的值完全编入索引。不要分析它。
在代码字段映射中是否遗漏了一些内容以避免这种情况?
答案 0 :(得分:1)
这是因为$$
是shell中的一个特殊环境变量,它被扩展为当前shell进程的ID。
因此,在运行curl
命令时,会发生当前shell的PID已解决并替换$$
变量,因此您看到4088
而不是$$
}。
尝试发布echo $$
,您将看到当前shell的ID。
curl -XGET 'http://localhost:9200/documents/_analyze?field=code' -d "ABC4088"
^
|
$$ replaced by the ID of your process
尝试简单地转义$
字符,你应该没问题
curl -XGET 'http://localhost:9200/documents/_analyze?field=code' -d "ABC\$\$"