NEST ElasticSearch.NET 转义特殊字符
NEST ElasticSearch.NET Escape Special Characters
我一直在尝试将 NEST 客户端用于 Elastic Search,但在过滤包含 special/reserved 个字符(例如 '/'
的字词时似乎遇到了障碍
下面是我的模型的 JSON 表示..
"categories": {
"count": 1,
"default": "root/Hello/World/Category",
}
当提交对 categories.default 字段的任何部分的搜索时,例如 "root" 或 "Hello" 我将收到一个匹配项,但是当搜索完整字符串或任何未找到包含“/”的字符串。
我从一些研究中了解到,这是因为在 indexing/tokenisation 过程中替换了保留字符 - 但是我还无法确定解决该问题的方法。
如有任何帮助,我们将不胜感激
下面添加了示例搜索查询
var result = ElasticSearchClient.Search<Schema.Product>(s => s
.From(0)
.Size(10)
.MatchAll()
.FilterRaw("{ \"term\": { \"categories.default\": \"root/Hello\" } }")
);
您需要设置一个多字段,因为破折号会导致术语拆分。我找到了一个类似问题的答案,它回答了你的问题:
我一直在尝试将 NEST 客户端用于 Elastic Search,但在过滤包含 special/reserved 个字符(例如 '/'
的字词时似乎遇到了障碍下面是我的模型的 JSON 表示..
"categories": {
"count": 1,
"default": "root/Hello/World/Category",
}
当提交对 categories.default 字段的任何部分的搜索时,例如 "root" 或 "Hello" 我将收到一个匹配项,但是当搜索完整字符串或任何未找到包含“/”的字符串。
我从一些研究中了解到,这是因为在 indexing/tokenisation 过程中替换了保留字符 - 但是我还无法确定解决该问题的方法。
如有任何帮助,我们将不胜感激
下面添加了示例搜索查询
var result = ElasticSearchClient.Search<Schema.Product>(s => s
.From(0)
.Size(10)
.MatchAll()
.FilterRaw("{ \"term\": { \"categories.default\": \"root/Hello\" } }")
);
您需要设置一个多字段,因为破折号会导致术语拆分。我找到了一个类似问题的答案,它回答了你的问题: