php - Elasticsearch 7.2使用映射和自定义分析器PHP创建索引

标签 php elasticsearch

我试图覆盖 flex 搜索分析器,以便为我正在处理的自动完成功能返回完全匹配的电子邮件。我目前正在使用PHP库进行 flex 搜索,但是大多数问题都在JSON中,因为对我而言,直接使用JSON而不是嵌套的PHP数组更容易。

我已经找到了一些假定的旧版本的旧示例,但是在7.2版中同时使用映射和自定义分析器创建索引并没有运气

  $queryStr= <<<'EOD'
    {
       "index":"my_db",
       "body":{
          "settings":{

             "analysis":{
                "analyzer":{
                   "my_email_analyzer":{
                      "type":"custom",
                      "tokenizer":"uax_url_email",
                      "filter":[
                         "lowercase",
                         "stop"
                      ]
                   }
                }
             }

          },
          "mapping":{
             "properties":{

                "ak_first_name":{
                   "type":"text",
                   "fields":{
                      "keyword":{
                         "type":"keyword",
                         "ignore_above":256
                      }
                   }
                },
                "ak_last_name":{
                   "type":"text",
                   "fields":{
                      "keyword":{
                         "type":"keyword",
                         "ignore_above":256
                      }
                   }
                },


                "uID":{
                   "type":"text",
                   "fields":{
                      "keyword":{
                         "type":"keyword",
                         "ignore_above":256
                      }
                   }
                },
                "email":{
                   "type":"text",
                   "fields":{
                      "keyword":{
                         "type":"string",
                         "analyzer":"my_email_analyzer"
                      }
                   }
                }
             }
          }
       }
    }
    EOD;


    $this->client->indices()->create($queryStr);

最佳答案

JSON中有两个小错别字:

  • mapping应该阅读mappings
  • string应该阅读text

  • 开始:
    $queryStr= <<<'EOD'
    {
       "index":"my_db",
       "body":{
          "settings":{
    
             "analysis":{
                "analyzer":{
                   "my_email_analyzer":{
                      "type":"custom",
                      "tokenizer":"uax_url_email",
                      "filter":[
                         "lowercase",
                         "stop"
                      ]
                   }
                }
             }
    
          },
          "mappings":{                                     <--- here
             "properties":{
               ...
    
                "email":{
                   "type":"text",
                   "fields":{
                      "keyword":{
                         "type":"text",                    <---- here
                         "analyzer":"my_email_analyzer"
                      }
                   }
                }
    

    关于php - Elasticsearch 7.2使用映射和自定义分析器PHP创建索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56763497/

    相关文章:

    java - 如何通过在java中的post请求中发送文件将数据导入elasticsearch?

    php - 从类内的函数传递变量并在类外回显

    php - Laravel Blade {{ $variable 或 'Default Text' }} 不使用 URL

    scala - java.lang.IllegalArgumentException:无法解析查询:{“query”:

    elasticsearch - Elasticsearch通过REST API更改节点名称

    java - 在ElasticSearch 7.4 java客户端中的geoShapeQuery中使用geojson多边形

    javascript - 如何逐行显示div元素

    php - 如何在 Apigen 中排除多个文件夹?

    php - PHP 中的 session 与 JSON 和 AJAX

    python - 如何在Django项目中使用elasticsearch?