【发布时间】:2020-08-21 18:46:37
【问题描述】:
我们有一个索引,它之前搜索了一些字段,例如:
"query":{
"bool":{
"filter":[
{
"term":{
"eventvisibility":"public"
}
}
],
"should":[
{
"multi_match":{
"query":"keyword",
"fields":[
"eventname",
"venue.name",
"venue.town"
],
"type":"cross_fields",
"minimum_should_match":"3<80%"
}
},
{
"match":{
"eventdescshort":{
"query":"keyword",
"minimum_should_match":"2<80%"
}
}
}
],
"minimum_should_match":1
}
}
这可行,但由于拼写错误等原因经常失败
所以我希望实现模糊搜索,因为这不适用于 cross_fields,所以我在索引中创建了一个新字段:
"mappings": {
"event": {
"properties": {
"basic_search": {
"type": "text",
"analyzer": "nameanalyzer"
},
"eventname":{
"type": "text",
"copy_to": "basic_search" ,
"fields": {
"raw": {
"type": "keyword"
}
},
"analyzer": "nameanalyzer"
},
"venue": {
"properties": {
"name": {
"type": "text",
"copy_to": "basic_search" ,
"fields": {
"raw": {
"type": "keyword"
}
},
"analyzer": "nameanalyzer"
},
...snip (all fields previosouly in cross_fields now have copy_to: basic_search) ...
}
而我们的分析器如下:
"nameanalyzer": {
"filter": [
"lowercase",
"stop",
"english_possessive_stemmer",
"english_minimal_stemmer",
"synonym",
"asciifolding",
"word_delimiter"
],
"char_filter": "html_strip",
"type": "custom",
"tokenizer": "standard"
}
我现在运行了一个测试搜索,如下:
{
"query": {
"fuzzy": {
"basic_search": {
"value": "carers fair"
}
}
}
但是,这根本没有给我任何匹配。
我刚刚得到:
"type": "MatchNoDocsQuery",
"description": "MatchNoDocsQuery(\"empty BooleanQuery\")",
我知道我在 _source 中看不到 basic_search 字段的内容,那么如何调试并知道为什么不匹配?
【问题讨论】:
-
以防万一您不知道查询 -> 在进行模糊搜索之前,fuzzy 不会分析输入文本。尝试{“查询”:{“匹配”:{“基本搜索”:{“查询”:“照顾者公平”,“模糊”:“自动”}}}}
-
已经解决了,@SahilGupta 可以随意弹出答案!
-
完成..请接受。
标签: elasticsearch