Azure cognitive search 使用Lucene查询语法的Azure搜索返回不正确的结果
我正在使用Microsoft.Azure.Search.NET SDK v5.0.1。我正试图对我的Azure搜索索引执行如下搜索:Documents.SearchAsync(“字段名:val*和时间戳:2018-05-03T13 \:23 \:59Z”)。结果是不正确的。我的索引中正好有两个文档带有该时间戳。我的索引中有121个文档,其中字段名以val开头。当我使用SDK运行上述查询时,它总是返回121个文档。有什么特殊的方法可以查询我丢失的时间戳吗?这里有几点需要说明:Azure cognitive search 使用Lucene查询语法的Azure搜索返回不正确的结果,azure-cognitive-search,Azure Cognitive Search,我正在使用Microsoft.Azure.Search.NET SDK v5.0.1。我正试图对我的Azure搜索索引执行如下搜索:Documents.SearchAsync(“字段名:val*和时间戳:2018-05-03T13 \:23 \:59Z”)。结果是不正确的。我的索引中正好有两个文档带有该时间戳。我的索引中有121个文档,其中字段名以val开头。当我使用SDK运行上述查询时,它总是返回121个文档。有什么特殊的方法可以查询我丢失的时间戳吗?这里有几点需要说明: 在索引定义中,我相信
时间戳
设置为字符串。否则您将无法进行搜索查询,因为DateTime字段不可搜索。首先,我建议不要将时间戳
视为字符串。这是因为可搜索字段要经过一系列分析(标记化就是其中之一)。在您的情况下,时间戳
查询(比如2018-05-03
)将被标记为更小的组成部分(2018、05、03),并且包含这些术语的文档将被返回。这就是为什么你观察你所看到的- 在时间戳上使用过滤器,这样它就不会经过分析
- 在筛选结果上,应用搜索查询
timeStamp
列设置为datetime,以获得更合理的语义parameters = new SearchParameters()
{
Filter = "timeStamp eq '2018-05-03'"
};
Documents.SearchAsync("fieldname:val*", parameters);
非常感谢。你的回答正是我所害怕的。由于内部原因,我们很难将过滤和搜索文本结合起来。不过,我明白你的意思。我将把这个标记为答案,因为它是。我将尝试修改时间戳类型(您是正确的,它是一个字符串)。我很好奇为什么您很难将searchText和筛选器结合起来。是不是因为你有时需要把这些条件或条件放在一起,而不是和它们在一起?