Mar*_*ica 45 wildcard elasticsearch
我有对象User具有属性Name和Surname.我希望使用一个查询在这些字段中搜索,我在文档中找到了multi_match,但我不知道如何正确使用它与通配符.可能吗?
我尝试使用multi_match查询,但它不起作用:
{
"query": {
"multi_match": {
"query": "*mar*",
"fields": [
"user.name",
"user.surname"
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
ram*_*laf 72
或者,您可以使用query_string带通配符的查询.
"query": {
"query_string": {
"query": "*mar*",
"fields": ["user.name", "user.surname"]
}
}
Run Code Online (Sandbox Code Playgroud)
这比在索引时使用nGram过滤器要慢(参见我的其他答案),但是如果你正在寻找一个快速而肮脏的解决方案......
此外,我不确定您的映射,但如果您使用user.name而不是name您的映射需要看起来像这样:
"your_type_name_here": {
"properties": {
"user": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"surname": {
"type": "string"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
小智 17
这样的查询对我有用:
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"should": [
{"query": {"wildcard": {"user.name": {"value": "*mar*"}}}},
{"query": {"wildcard": {"user.surname": {"value": "*mar*"}}}}
]
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
与你正在做的类似,除了在我的情况下,不同领域可能有不同的面具.
小智 10
我现在就这样做了:
GET _search {
"query": {
"bool": {
"must": [
{
"range": {
"theDate": {
"gte": "2014-01-01",
"lte": "2014-12-31"
}
}
},
{
"match" : {
"Country": "USA"
}
}
],
"should": [
{
"wildcard" : { "Id_A" : "0*" }
},
{
"wildcard" : { "Id_B" : "0*" }
}
],"minimum_number_should_match": 1
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不会使用通配符,它将无法很好地扩展。您在查询时询问了很多搜索引擎。您可以使用nGram过滤器在索引时间而不是搜索时间进行处理。
正确索引name和之后surname(更改映射,上面的链接中有示例),您可以使用多重匹配,但不使用通配符并获得预期的结果。
小智 6
类似于上面的建议,但这很简单,对我有用:
{
"query": {
"bool": {
"must":
[
{
"wildcard" : { "processname.keyword" : "*system*" }
},
{
"wildcard" : { "username" : "*admin*" }
},
{
"wildcard" : { "device_name" : "*10*" }
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
53919 次 |
| 最近记录: |