我正在使用Microsoft.Azure.Search .NET SDK v5.0.1。我试图对我的Azure搜索索引执行如下搜索:Documents.SearchAsync(“ fieldname:val * AND timeStamp:2018-05-03T13 \:23 \:59Z”)。结果不正确。我的索引中恰好有2个文档带有该时间戳。我的索引中有121个文档,其中字段名以val开头。当我使用SDK运行上述查询时,它总是返回121个文档。有什么特殊的查询时间戳的方法吗?
答案 0 :(得分:1)
这里有几点要说明:
在索引定义中,我相信您已将timeStamp
设置为字符串。否则,由于DateTime字段不可搜索,您将无法进行搜索查询。首先,我建议不要将timeStamp
视为字符串。这是因为可搜索字段经过大量分析(令牌化就是其中之一)Reference on query parsing。在您的情况下,timestamp
查询(例如2018-05-03
)将被标记为较小的成分(2018、05、03),并且将返回包含任何这些术语的文档。这就是为什么您观察所见。
您的情况似乎是根据条件“过滤”结果的经典案例,然后是对过滤后的文档进行“搜索”。为此,您需要执行以下操作:
但是我强烈建议,如果可能的话,您应该将timeStamp
列设为日期时间以获取更合理的语义。
作为示例,以下是实现过滤器+搜索组合的方法:
parameters = new SearchParameters()
{
Filter = "timeStamp eq '2018-05-03'"
};
Documents.SearchAsync("fieldname:val*", parameters);