ruby-on-rails-4 - 在任何列中搜索单词的任何部分

标签 ruby-on-rails-4 elasticsearch

我正在尝试搜索全名,电子邮件或电话

例如

如果我开始输入“+16”,它将显示所有电话号码开头或包含“+16”的用户。与全名和电子邮件相同

我的ES配置是:

{
   "users" : {
      "mappings" : {
         "user" : {
            "properties" : {
               "full_name" : {
                  "analyzer" : "trigrams",
                  "include_in_all" : true,
                  "type" : "string"
               },
               "phone" : {
                  "type" : "string",
                  "analyzer" : "trigrams",
                  "include_in_all" : true
               },
               "email" : {
                  "analyzer" : "trigrams",
                  "include_in_all" : true,
                  "type" : "string"
               }
            },
            "dynamic" : "false"
         }
      },
      "settings" : {
         "index" : {
            "creation_date" : "1472720529392",
            "number_of_shards" : "5",
            "version" : {
               "created" : "2030599"
            },
            "uuid" : "p9nOhiJ3TLafe6WzwXC5Tg",
            "analysis" : {
               "analyzer" : {
                  "trigrams" : {
                     "filter" : [
                        "lowercase"
                     ],
                     "type" : "custom",
                     "tokenizer" : "my_ngram_tokenizer"
                  }
               },
               "tokenizer" : {
                  "my_ngram_tokenizer" : {
                     "type" : "nGram",
                     "max_gram" : "12",
                     "min_gram" : "2"
                  }
               }
            },
            "number_of_replicas" : "1"
         }
      },
      "aliases" : {},
      "warmers" : {}
   }
}

按名称搜索名称“Robert”

curl -XGET'本地主机:9200 / users / _search?pretty'-d'
{
“查询”:{
“比赛”: {
“_all”:“抢”
}
}
}'

仅使用全名不会给出预期的结果。

最佳答案

由于您的分析器是在full_namephoneemail字段上设置的,因此您不应使用_all字段,而应在multi_match查询中枚举这些字段,如下所示:

curl -XGET 'localhost:9200/users/_search?pretty' -d'{
  "query": {
    "multi_match": {
      "query": "this is a test",
      "fields": [
        "full_name",
        "phone",
        "email"
      ]
    }
  }
}'

关于ruby-on-rails-4 - 在任何列中搜索单词的任何部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39267417/

相关文章:

arrays - 在Elasticsearch中按数组索引对搜索结果进行排序

ruby-on-rails-4 - Rails 4 - best_in_place : Unprocessable Entity

elasticsearch - Elasticsearch 索引中最受欢迎的搜索短语

elasticsearch - 在 Elasticsearch 中存储网站URL命中计数

ruby-on-rails - 在 Heroku、PostgreSQL 和 Rails 5 上运行迁移时出错

Elasticsearch 完全匹配分析的字段

Elasticsearch 术语建议器不会返回完全匹配的结果

ruby-on-rails-4 - Rails 4 Action Mailer - 附加非本地内联图像(带有 URL)

ruby-on-rails - rails : Setting a value to input field if variable exists

ruby - 全局化 gem 和 Rails 4 强参数