Skip to content

Instantly share code, notes, and snippets.

@montao
Last active August 24, 2021 20:59
Show Gist options
  • Save montao/9c142c3ae5dbe3682df944582ffbfba2 to your computer and use it in GitHub Desktop.
Save montao/9c142c3ae5dbe3682df944582ffbfba2 to your computer and use it in GitHub Desktop.
Search cars
from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search
es_connect = "http://user:f1zzbu33@42.242.170.41:80/elasticsearch"
@app.before_first_request
def before_first_request_func():
global es
try:
if es is None:
es = Elasticsearch([es_connect_5])
es.indices.create(index=INDEX_NAME, ignore=400)
except Exception as exc:
error_message = str(exc)
g.error_message = error_message # Make a list of errors
x_logging.error(error_message)
@app.route("/tasks/buildindex", methods=['GET'])
def build_index():
max_fetch = 99999
edge = datetime.now() - timedelta(days=x_days)
ads = Ad.query().filter(Ad.modified > edge).filter(Ad.published == True).fetch(max_fetch)
es.indices.create(index=INDEX_NAME, ignore=400)
for ad in ads:
img = None
if len(ad.images) > 0:
img = ad.images[0]
# TODO refactor into a shared object
doc = {
'author': ad.name,
'id': ad.key.id(),
'title': ad.title,
'limit': ad.limit,
'currency': ad.currency,
'company_ad': ad.company_ad,
'video': ad.hasvideo,
'price': ad.price,
'phonenumber': ad.phonenumber,
'phoneview': ad.phoneview,
'text': ad.text,
'category': ad.category,
"category_name": category_id_to_name.get(ad.category),
'city': ad.city,
'type': ad.type,
'published': ad.published,
'image': img,
'region': ad.region,
'timestamp': ad.modified,
'milliseconds': int(ad.modified.timestamp() * 1000)
}
res = es.index(index=INDEX_NAME, doc_type='ad', id=ad.key.id(), body=doc)
data = {'message': 'Created', 'code': 'SUCCESS'}
return make_response(jsonify(data), 201)
@app.route('/Cars/<car_model>', defaults={'seo_url': None})
@app.route('/<seo_url>', defaults={'car_model': None})
@app.route("/view-ads.html", defaults={'car_model': None, 'seo_url': None})
def view_ads(seo_url, car_model):
x_page = 1
start = 0
size = 50
x_city = None
x_region = None
x_query = None
x_category = None
x_tab = None
s = Search(using=es, index=INDEX_NAME).filter("term", published=True)
if request.args.get('start'):
start = int(request.args.get('start'))
if request.args.get('size'):
size = int(request.args.get('size'))
if request.args.get('page'):
start = int(request.args.get('page')) * size - size
if request.args.get('query'):
x_query = request.args.get('query').lower()
if request.args.get('city'):
x_city = request.args.get('city').lower()
if request.args.get('region'):
x_region = request.args.get('region').lower()
if request.args.get('category'):
x_category = request.args.get('category').lower()
if request.args.get('tab'):
x_tab = request.args.get('tab').lower()
if car_model is not None:
x_query = car_model.lower()
if seo_url in in_state_list:
x_region = seo_url.replace("_", " ")
if x_city is not None:
s = s.filter("term", city=x_city)
if x_region is not None:
s = s.filter("term", region=x_region)
if x_category is not None:
s = s.filter("term", category=x_category)
if x_tab == "companies":
s = s.filter("term", company_ad=True)
elif x_tab == "private":
s = s.filter("term", company_ad=False)
if x_query is not None:
s = s.query("match", text=x_query)
s = s.sort('-milliseconds')
companies = s.filter("term", company_ad=True)
private = s.filter("term", company_ad=False)
end = start + size
qres = s[start:end].execute()
total = s.count()
x_companies = companies[start:end].execute()
x_private = private[start:end].execute()
if start > 0:
x_page = int(start / 50) + 1
return render_template('view-ads.html', total=total, page=x_page, start=start, size=size, request=request,
query=x_query, res=qres, es=es, results_private=x_private, error_message=g.error_message,
VERSION=VERSION(), user_data=g.claims,
results_companies=x_companies)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment