我发送请求:
POST http://localhost:9200/mydatabase/users/_search
身体:
{
"query": {
"fuzzy" : {
"role" : {
"value": "admn",
"boost": 1.0,
"fuzziness": 1,
"prefix_length": 0,
"max_expansions": 100
}
}
}
}
我得到了这个回应:
"hits": [
{
"_index": "mydatabase",
"_type": "users",
"_id": "mKstz2IBuOClWUbC0-1v",
"_score": 0.5198604,
"_source": {
"user": "Сорокин Роман",
"description": "Данному пользователю предоствлена админка",
"role": "Admin"
}
}
]
如果我想通过所有字段进行搜索,如何编写查询,而不仅仅是字段“role”并使用模糊?
Сan我在没有配置映射的情况下编写查询?
答案 0 :(得分:0)
因为你提到"没有配置映射" - 我假设您已经考虑过_all field(需要更改映射)。
选项包括:
1 - 使用"Query String" query而不使用default_field并使用Lucene Query syntax进行模糊匹配;如文档中所述 - 默认情况下,它组合所有字段以生成查询。
GET /_search
{
"query": {
"query_string" : {
query" : "admn~"
}
}
}
您还可以定位特定字段(包括通配符)。
GET /_search
{
"query": {
"query_string" : {
"fields": "role*"
"query" : "admn~"
}
}
}
2-使用bool query和should子句组合多个字段。
POST _search
{
"query": {
"bool": {
"should": [
{
"fuzzy": {
"role": {
"value": "admn",
"boost": 1,
"fuzziness": 1,
"prefix_length": 0,
"max_expansions": 100
}
}
},
{
"fuzzy": {
"role2": {
"value": "admn",
"boost": 1,
"fuzziness": 1,
"prefix_length": 0,
"max_expansions": 100
}
}
}
]
}
}
}