elasticsearch,Php,elasticsearch" /> elasticsearch,Php,elasticsearch" />

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

Elasticsearch 7.2使用映射和自定义分析器php创建索引,php,elasticsearch,Php,elasticsearch,我正在尝试覆盖弹性搜索分析器,以便为我正在处理的自动完成返回精确匹配的电子邮件。我目前正在使用PHP库进行弹性搜索,但大部分问题都在JSON中,因为直接使用JSON比使用嵌套PHP数组更容易 我已经找到了一些以前版本的老例子,但在版本7.2中,我没有幸运地使用映射和自定义分析器创建索引 $queryStr= <<<'EOD' { "index":"my_db", "body":{ "settings":{

我正在尝试覆盖弹性搜索分析器,以便为我正在处理的自动完成返回精确匹配的电子邮件。我目前正在使用PHP库进行弹性搜索,但大部分问题都在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);
$queryStr=create($queryStr);

您的JSON中有两个小错误:

  • 映射
    应为
    映射
  • 字符串
    应为
    文本
下面是:

$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"
                  }
               }
            }

$queryStr=如果直接点击ES REST api,您是否能够创建索引?工作非常完美!非常感谢你!!太棒了,很高兴它有帮助!