Lucene 查询 - AND 运算符在 Azure 搜索中失败?
Lucene Query - AND operator failing in Azure Search?
我有一个三明治的搜索索引。该索引包含三个字段:id、meat 和 bread。每个字段都是一个 Edm.String。在这个索引中,这是我的数据的一个子集:
ID | Meat | Bread
-----------------------
1 | Ham | White
2 | Turkey | Hoagie
3 | Tuna | Wheat
4 | Roast Beef | White
5 | Ham | Wheat
6 | Roast Beef | Rye
7 | Turkey | Wheat
我需要写一个查询 returns 小麦面包上的所有火腿或火鸡三明治。为了做到这一点,我创建了以下内容:
{
"search":"(meat:(Ham|Turkey) AND bread:\"Wheat\")",
"searchMode":"all",
"select":"id,meat,bread"
}
当我 运行 这个查询时,我没有看到任何结果。我错过了什么?我究竟做错了什么?我试图理解完整的查询。字段级查询是否支持短语运算符?我不确定我做错了什么。
您需要使用 "queryType": "full" 来请求 Lucene 语法。看到一个 example on MSDN.
也就是说,使用 过滤器 可以更轻松、更高效地完成您想要完成的任务。假设您使索引中的相关字段可过滤,您可以在示例中使用以下过滤表达式:$filter=(meat eq 'Ham' or meat eq 'Turkey') and bread eq 'Wheat' .有关过滤器的更多信息,请参阅 this article。希望这可以帮助!
我有一个三明治的搜索索引。该索引包含三个字段:id、meat 和 bread。每个字段都是一个 Edm.String。在这个索引中,这是我的数据的一个子集:
ID | Meat | Bread
-----------------------
1 | Ham | White
2 | Turkey | Hoagie
3 | Tuna | Wheat
4 | Roast Beef | White
5 | Ham | Wheat
6 | Roast Beef | Rye
7 | Turkey | Wheat
我需要写一个查询 returns 小麦面包上的所有火腿或火鸡三明治。为了做到这一点,我创建了以下内容:
{
"search":"(meat:(Ham|Turkey) AND bread:\"Wheat\")",
"searchMode":"all",
"select":"id,meat,bread"
}
当我 运行 这个查询时,我没有看到任何结果。我错过了什么?我究竟做错了什么?我试图理解完整的查询。字段级查询是否支持短语运算符?我不确定我做错了什么。
您需要使用 "queryType": "full" 来请求 Lucene 语法。看到一个 example on MSDN.
也就是说,使用 过滤器 可以更轻松、更高效地完成您想要完成的任务。假设您使索引中的相关字段可过滤,您可以在示例中使用以下过滤表达式:$filter=(meat eq 'Ham' or meat eq 'Turkey') and bread eq 'Wheat' .有关过滤器的更多信息,请参阅 this article。希望这可以帮助!