在elastic search中忽略'AND'、'OR'和query_string的结构,按字面搜索
Ignore 'AND', 'OR' constructions with query_string in elastic search and do literally search
在 elasticsearch 中可以执行以下查询:
GET /_search
{
"query": {
"query_string": {
"query": "(apple) OR (banana)",
}
}
}
这会导致所有文档的任何字段的值为 'apple' 或 'banana'。我正在寻找一种方法来防止用户在搜索框中输入诸如“(apple) OR (banana)”之类的查询。 这应该转换为对“(apple) OR (banana)”的文字搜索(因此返回值设置为“(apple) OR (banana)”的任何文档)。最好的方法是什么?
为了提供更多上下文:选择“query_string”是为了能够使用通配符对整个文档执行 'contains' 查询。
提前致谢!
[编辑] 更清楚一点:
示例:
- 文档 1:{“零食”:“苹果”}
- 文档 2:{“小吃”:“香蕉”}
- 文档 3:{“零食”:“(苹果)或(香蕉)”}
如果用户搜索 "(apple) OR (banana)" 这通常会导致 Doc 1 和 Doc 2,但我希望它只与 Doc 匹配3.
解决了感谢@Bhavya 和@TreffnonX:
摘要:采用@Bhavya 解决方案,但将我的搜索字符串用额外的双引号引起来:
GET _search
{
"query": {
"query_string": {
"query": "\"\(apple\) OR \(banana\)\""
}
}
}
或
GET _search
{
"query": {
"query_string": {
"query": "\"(apple) OR (banana)\""
}
}
}
添加具有索引数据、搜索查询和搜索结果的工作示例
索引数据:
{ "snack": "apple" }
{"snack": "banana"}
{"snack": "(apple) OR (banana)"}
搜索查询:
{
"query": {
"query_string": {
"query": "\(apple\) OR \(banana\)"
}
}
}
搜索结果:
"hits": [
{
"_index": "stof_64352271",
"_type": "_doc",
"_id": "1",
"_score": 4.0350027,
"_source": {
"snack": "(apple) OR (banana)"
}
}
]
在 elasticsearch 中可以执行以下查询:
GET /_search
{
"query": {
"query_string": {
"query": "(apple) OR (banana)",
}
}
}
这会导致所有文档的任何字段的值为 'apple' 或 'banana'。我正在寻找一种方法来防止用户在搜索框中输入诸如“(apple) OR (banana)”之类的查询。 这应该转换为对“(apple) OR (banana)”的文字搜索(因此返回值设置为“(apple) OR (banana)”的任何文档)。最好的方法是什么?
为了提供更多上下文:选择“query_string”是为了能够使用通配符对整个文档执行 'contains' 查询。
提前致谢!
[编辑] 更清楚一点: 示例:
- 文档 1:{“零食”:“苹果”}
- 文档 2:{“小吃”:“香蕉”}
- 文档 3:{“零食”:“(苹果)或(香蕉)”}
如果用户搜索 "(apple) OR (banana)" 这通常会导致 Doc 1 和 Doc 2,但我希望它只与 Doc 匹配3.
解决了感谢@Bhavya 和@TreffnonX: 摘要:采用@Bhavya 解决方案,但将我的搜索字符串用额外的双引号引起来:
GET _search
{
"query": {
"query_string": {
"query": "\"\(apple\) OR \(banana\)\""
}
}
}
或
GET _search
{
"query": {
"query_string": {
"query": "\"(apple) OR (banana)\""
}
}
}
添加具有索引数据、搜索查询和搜索结果的工作示例
索引数据:
{ "snack": "apple" }
{"snack": "banana"}
{"snack": "(apple) OR (banana)"}
搜索查询:
{
"query": {
"query_string": {
"query": "\(apple\) OR \(banana\)"
}
}
}
搜索结果:
"hits": [
{
"_index": "stof_64352271",
"_type": "_doc",
"_id": "1",
"_score": 4.0350027,
"_source": {
"snack": "(apple) OR (banana)"
}
}
]