Tho*_*mas 4 elasticsearch nest
我有 ES 文档,其中一个字段是一个 guid。
\n\n当我尝试进行匹配时,破折号会严重破坏我的搜索,并且我会得到一堆不相关的部分匹配项。
\n\n由于该字段是一个 guid,因此它始终需要精确匹配。
\n\n在 Kibana 中,我可以将 guid 用引号引起来,并且得到精确匹配;对于 NEST,引号 don\xe2\x80\x99t 没有帮助。我也尝试过逃避破折号,但没有成功。
\n\n我需要按原样存储 guid,因为在某些情况下我必须检索完整的 guid 文档,因此我可以\xe2\x80\x99t 删除其中的破折号。
\n\n有没有办法用 NEST 标记该字段,以便当我查询时只返回完全匹配的内容?
\n\n编辑:\n根据下面的答案,这就是我所做的:
\n\n我将 [Nest.Keyword] 添加到 guid 字段
我这样查询:
\n\nvar R = await _ElasticClient.SearchAsync<PictureObject>(Sr => Sr\n .Query(Q => Q.Term(Te => Te\n .Field(F => F.AlbumId) <- the guid field\n .Value(IdString)); <- my value\nRun Code Online (Sandbox Code Playgroud)但这不会返回任何内容。
\n\n弹性站点的文档给出了一个示例(https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/terms-query-usage.html):
\n\nq\n.Terms(c => c\n.Name("named_query")\n.Boost(1.1)\n.Field(p => p.Description)\n.Terms("term1", "term2")\n)\nRun Code Online (Sandbox Code Playgroud)\n\n我找不到任何有关Name方法的文档,对于单个字段,我所做的似乎很相似,所以我不知道它对我的情况有什么影响(如果有的话)。
\n\n从 Kibana 看到的我的领域的映射是:
\n\n "mapping": {\n "pictureobject": {\n "properties": {\n "AlbumId": {\n "type": "text",\n "fields": {\n "keyword": {\n "type": "keyword",\n "ignore_above": 256\n }\n }\n }\nRun Code Online (Sandbox Code Playgroud)\n\n,
\n将 映射Guid为keyword类型并使用术语级别查询(例如term查询)来查找精确匹配。
var r = await _ElasticClient.SearchAsync<PictureObject>(sr => sr
.Query(q => q
.Term(te => te
.Field(f => f.AlbumId.Suffix("keyword"))
.Value(IdString)
)
)
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3884 次 |
| 最近记录: |