我是Elasticsearch的初学者,我正在做一个项目,其中的要求是寻找应该从提供的模式开始的字段值。
在本例中,我使用通配符作为搜索模式。(例如:Ste.*
)。
此外,我使用_msearch
选项在多个字段中进行搜索。
我需要匹配记录和匹配记录的计数。我使用聚合来获得计数。
然而,在搜索数值时没有问题。当我搜索String时,则存在大小写敏感的问题。当我搜索Ste
时,我可以看到诸如Stephen,Steven和Stella的结果。
当我在小写中搜索ste
时,没有返回任何内容。
下面是我尝试的脚本:
import logging
import os
import json
import boto3
import requests
import elasticsearch
from elasticsearch import Elasticsearch
ES_Index_Name = 'emp_details_1_1'
ES_Cluster_IP = 'localhost'
def lambda_handlet(event):
ES_URL = f'http://{ES_Cluster_IP}:9200/{ES_Index_Name}/_msearch'
print("URL - ", ES_URL)
query_input = event
query_input_star = '.*'
query_input_re = query_input + query_input_star
searchString = [ {"index": "emp_details_1_1"},
{"_source":[],"size":0,"min_score":1,"query":{"prefix":{"firstname.keyword":query_input}},"aggs":{"firstname":{"terms":{"field":"firstname.keyword","include":query_input_re}},"firstname_count":{"value_count":{"field":"firstname.keyword"}}}},
{"index": "emp_details_1_1"},
{"_source":[],"size":0,"min_score":1,"query":{"prefix":{"phone.keyword":query_input}},"aggs":{"phone":{"terms":{"field":"phone.keyword","include":query_input_re}},"phone_count":{"value_count":{"field":"phone.keyword"}}}}]
searchQuery = ""
for d in searchString:
searchQuery += json.dumps(d) + "," + "\n"
print("API Global search fn: ",d)
print("searchQuery: ", searchQuery)
headers = {"Content-Type":"application/json","Accept":"test/plain"}
searchResponse = requests.get(url=ES_URL, headers=headers, data=searchQuery)
print("API Global response: ", json.loads(searchResponse.text))
lambda_handlet('M')
下面是索引的Map:
{
"emp_details_1_1" : {
"mappings" : {
"properties" : {
"firstname" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
"phone" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
}
}
},
}
}
}
}
下面是示例输出:
{'took': 190, 'responses': [{'took': 190, 'timed_out': False, '_shards': {'total': 1, 'successful': 1, 'skipped': 0, 'failed': 0}, 'hits': {'total': {'value': 3, 'relation': 'eq'}, 'max_score': None, 'hits': []}, 'aggregations': {'firstname': {'doc_count_error_upper_bound': 0, 'sum_other_doc_count': 0, 'buckets': [{'key': 'Masha', 'doc_count': 1}, {'key': 'Millard', 'doc_count': 1}, {'key': 'Monte', 'doc_count': 1}]}, 'firstname_count': {'value': 3}}, 'status': 200}, {'took': 20, 'timed_out': False, '_shards': {'total': 1, 'successful': 1, 'skipped': 0, 'failed': 0}, 'hits': {'total': {'value': 0, 'relation': 'eq'}, 'max_score': None, 'hits': []}, 'aggregations': {'phone_count': {'value': 0}, 'phone': {'doc_count_error_upper_bound': 0, 'sum_other_doc_count': 0, 'buckets': []}}, 'status': 200}]}
我如何修改我的脚本,使搜索执行不区分大小写的搜索,而不管我传递的字符串是小写还是大写?
1条答案
按热度按时间5lwkijsr1#
增加大小写不敏感参数,[7.10.0]以后支持该功能