在elasticsearch中,可以执行以下查询:
GET /_search
{
"query": {
"query_string": {
"query": "(apple) OR (banana)",
}
}
}
这将导致所有文档都具有值为“apple”或“banana”的任何字段。我正在寻找一种方法来防止用户在搜索框中编写“(apple)或(banana)”之类的查询。这应该转换为对“(apple)或(banana)”的文字搜索(因此返回任何值设置为“(apple)或(banana)”的文档)。最好的办法是什么?
为了提供更多的上下文,选择“query\u string”可以使用通配符对整个文档执行“contains”查询。
提前谢谢!
[编辑]更清楚一点:示例:
文档1:{“零食”:“苹果”}
文档2:{“零食”:“香蕉”}
文档3:{“零食”:(苹果)或(香蕉)}
如果用户搜索“(apple)或(banana)”,通常会得到doc1和doc2,但我希望它只与doc3匹配。
多亏了@bhavya和@treffnonx:summary:采用了@bhavya解决方案,但将我的搜索字符串用额外的双引号括起来:
GET _search
{
"query": {
"query_string": {
"query": "\"\\(apple\\) OR \\(banana\\)\""
}
}
}
或
GET _search
{
"query": {
"query_string": {
"query": "\"(apple) OR (banana)\""
}
}
}
1条答案
按热度按时间hgc7kmma1#
添加索引数据、搜索查询和搜索结果的工作示例
索引数据:
搜索查询:
搜索结果: