gpt4 book ai didi

elasticsearch - elasticsearch:对通配符使用通配符

转载 作者:行者123 更新时间:2023-12-03 00:41:31 25 4
gpt4 key购买 nike

我想查找所有以20开头的年份值的对象...所以我想搜索20 *,其中*是通配符。
我尝试类似

'match_phrase_prefix': { 'year': { 'query': '20*', 'max_expansions': 50}}

但是我猜这只适用于字符串。我该如何处理整数?

编辑:我找到了一个解决方案...它不是很漂亮,但它可以工作
year_query = '20'
if len(str(year_query)) < 4:
try:
low_year, high_year = extend_year(int(year_query))
filter_list.append({"range": {"year": {"gte": low_year, "lte": high_year}}})
except ValueError:
print "Not a valid input for year"
pass
else:
for year in year_query.split(','):
if '-' in year:
year_range = year.split('-')
high_year = year_range[1].strip()
if len(high_year) < 4:
low_year, high_year = extend_year(high_year)
try:
filter_list.append({"range" : {"year" : {"gte" : int(year_range[0].strip()),"lte" : int(high_year),"format": "yyyy"}}})
except ValueError:
print "Not a valid input for year"
pass
else:
try:
filter_list.append({ "match": {"year": int(year.strip()) }})
except ValueError:
print "Not a valid input for year"
pass

与功能
def extend_year(input_year):
length = len(str(input_year))
if length == 4:
return input_year, 0
elif length == 3:
return input_year*10, int(str(input_year) + '9')
elif length == 2:
return input_year*100, int(str(input_year) + '99')
elif length == 1:
return input_year*1000, int(str(input_year) + '999')
elif length == 0:
return 0, 9999
else:
return input_year, 0

如果有人可以提出更好的解决方案,请告诉我

最佳答案

这应该工作

'range': { 'year': { 'gte': 2000, 'max_expansions': 50}}

关于elasticsearch - elasticsearch:对通配符使用通配符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37662973/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com