【问题标题】:Elasticsearch replacing cross_fields with combined field and fuzzyElasticsearch用组合字段和模糊替换cross_fields
【发布时间】: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


【解决方案1】:

模糊查询在搜索之前不分析文本。应避免使用相同的。

摘自以下ES Doc

模糊查询:通常应避免使用elasticsearch 模糊查询类型。行为很像一个术语查询。不先分析查询文本。

请尝试以下查询:

  {
   "query":{
      "match":{
         "basic_search":{
            "query":"carers fair",
            "fuzziness":"AUTO"
         }
      }
   }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-24
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多