在弹性搜索5.6中如何对分析字段进行字母排序?

时间:2018-10-01 09:30:26

标签: elasticsearch

我在Elastic Search中遇到字母排序问题。

我有一个Index:indexlive和一个具有以下映射的“用户”类型:

{
  "liveindex": {
    "mappings": {
      "users": {
        "properties": {
          "user_Confirmed": {
            "type": "boolean"
          },
          "user_DateOfBirth": {
            "type": "text"
          },
          "user_Email": {
            "type": "text",
            "analyzer": "standard"
          },
          "user_Gender": {
            "type": "text"
          },
          "user_Name": {
            "type": "text",
            "analyzer": "standard"
          },
          "user_Photo": {
            "type": "text"
          },
          "user_UserID": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

我的查询是这样:

{
  "index": "liveindex",
  "type": "users",
  "body": {
    "from": 0,
    "size": 50,
    "query": {
      "query_string": {
        "fields": [
          "user_Name"
        ],
        "default_operator": "AND",
        "query": "neel"
      }
    },
    "sort": {
      "_score": {
        "order": "desc"
      }
    }
  }
}

在上述查询中运行时,我得到以下结果:

Neel Chaudhary

ITZ NEEL

neel modi

尼尔·亚格尼克

anu neel

swapna neel

我希望查询首先返回以“ Neel”或“ neel”作为第一个单词的名称。但是,正如您所看到的,ITN NEEL超出了所需的顺序。我也应用了按user_Name排序,但没有成功。 我知道弹性搜索使用的是字典顺序而不是字母顺序。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:3)

这不是字典顺序和字母顺序的问题。您应该为driver.findElement(By.xpath("//*[@id="btnLogin"]")).click(); if(driver.findElements(By.xpath("/html/body/div/form/div/div/span")).size()==1){ System.out.println("Invalid"); } else { System.out.println("Login Passed"); } 字段创建一个keyword子字段,以便以后可以使用user_Name前缀增强文档:

neel

然后,为您的数据建立索引,并最终使用以下查询,这将对具有以PUT liveindex { "settings": { <-- add these settings "analysis": { "normalizer": { "lowercase": { "type": "custom", "filter": ["lowercase"] } } } }, "mappings": { "users": { "properties": { "user_Confirmed": { "type": "boolean" }, "user_DateOfBirth": { "type": "text" }, "user_Email": { "type": "text", "analyzer": "standard" }, "user_Gender": { "type": "text" }, "user_Name": { "type": "text", "analyzer": "standard", "fields": { <-- add this sub-field "sort": { "type": "keyword", "normalizer": "lowercase" } } }, "user_Photo": { "type": "text" }, "user_UserID": { "type": "keyword" } } } } } 开头的user_Name字段的文档有所帮助:

neel

您将按照以下顺序获取文档:

  • 尼尔·亚格尼克
  • nei modi
  • 乔尔哈里(Neel Chaudhary)
  • ITZ NEEL
  • anu neel
  • swapna neel