我在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排序,但没有成功。 我知道弹性搜索使用的是字典顺序而不是字母顺序。
有人可以帮我吗?
答案 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
您将按照以下顺序获取文档: