[英]Elasticsearch insensitive search by term
我有下一個查詢查詢
{
"query":{
"bool":{
"must":[
{
"term":{
"cardrecord.fields.name.raw":"HERE_IS_SOME_NAME"
}
}
],
"must_not":[
],
"should":[
]
}
},
"from":0,
"size":50,
"sort":[
],
"facets":{
}
}
如何按字詞修改區分大小寫的查詢? 如果需要,我可以添加更多描述。
使用過濾器而不是查詢,這將大大減少處理量:
{
"filter":{
"bool":{
"must":[
{
"term":{
"cardrecord.fields.name.raw":"HERE_IS_SOME_NAME"
}
}
],
"must_not":[
],
"should":[
]
}
},
"from":0,
"size":50,
"sort":[
],
"facets":{
}
}
嘗試使用匹配查詢
{
"query":{
"bool":{
"must":[
{
"match":{
"cardrecord.fields.name.raw":"HERE_IS_SOME_NAME"
}
}
],
"must_not":[
],
"should":[
]
}
},
"from":0,
"size":50,
"sort":[
],
"facets":{
}
}
您可以使用match
查詢,但您需要匹配cardrecord.fields.name
字段,因為raw
子字段可能not_analyzed
,因此不適用於不區分大小寫的匹配。
{
"query": {
"bool": {
"must": [
{
"match": {
"cardrecord.fields.name": "HERE_IS_SOME_NAME"
}
}
],
"must_not": [],
"should": []
}
},
"from": 0,
"size": 50,
"sort": [],
"facets": {}
}
默認情況下,所有字段均使用Standard Analyzer
進行Standard Analyzer
。 如果在mapping
指定了"index":"not_analyzed"
,則不會分析該字段
Standard Analyzer
將輸入字符串轉換為小寫並使用空格和特殊字符進行拆分。 因此,在您的情況下, HERE_IS_SOME_NAME
將被拆分為some
name
令牌。 但是here
和is
的標記不會被創建,因為它們是英語副詞。
當搜索"cardrecord.fields.name.raw"
字段時, "cardrecord.fields.name.raw"
發生同樣的事情。 它拆分為標記,並在特定字段中搜索所有帶有該標記的文檔(使用Standard Analyzer
)。 PS:可以配置單獨或不同的analyzer
進行搜索。
因此,匹配查詢會搜索帶有some
和name
標記的所有文檔。 因此,您將獲得其他文件。
term query
專門查找確切的大小寫和全字匹配。 但這不會與任何文檔匹配,因為令牌已被split
且lowercase
請按照您的要求執行以下步驟:
{
"mappings": {
"my_type": {
"properties": {
"cardrecord.fields.name.raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}
按照上面給出的代碼,為名為my_type
的index
更新此mapping
。 但是,您需要使用新的映射創建新的索引。 由於更新可能無法反映。 然后嘗試在您的問題中運行搜索查詢。
添加詳細的查詢順序:
制圖:
{
"mappings": {
"my_type": {
"properties": {
"cardrecord.fields.name.raw": {
"type": "string",
"index": "not_analyzed",
"store": "true"
}
}
}
}
}
索引文件:
{
"cardrecord.fields.name.raw": "HERE_IS_SOME_NAME"
}
搜索查詢:
{
"query": {
"bool": {
"must": [
{
"term": {
"cardrecord.fields.name.raw": "HERE_IS_SOME_NAME"
}
}
],
"must_not": [],
"should": []
}
},
"from": 0,
"size": 50,
"sort": [],
"facets": {}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.