Bläddra i källkod

added full country search function

solr_update
Simon Bowie 2 år sedan
förälder
incheckning
ea13f4aa54
4 ändrade filer med 74 tillägg och 7 borttagningar
  1. +28
    -3
      web/app/search.py
  2. +32
    -2
      web/app/solr.py
  3. +7
    -2
      web/app/templates/data.html
  4. +7
    -0
      web/app/templates/search.html

+ 28
- 3
web/app/search.py Visa fil

@@ -25,7 +25,7 @@ def basic_search():
sort = request.form.get('sort')
else:
sort = 'relevance'
search_results = solr.solr_search(core, sort, search)
search_results = solr.content_search(core, sort, search)
results = search_results[0]
num_found = search_results[1]
total_number = solr.get_total_number(core)
@@ -38,6 +38,8 @@ def basic_search():
def id_search():
if request.args.get('id') is None:
return redirect(url_for('main.index'))
else:
id = request.args.get('id')
if request.args.get('core') is not None:
core = request.args.get('core')
else:
@@ -46,8 +48,7 @@ def id_search():
sort = request.args.get('sort')
else:
sort = 'relevance'
id = request.args.get('id')
search_results = solr.solr_search(core, sort, search, id)
search_results = solr.content_search(core, sort, search, id)
results = search_results[0]

for result in results:
@@ -58,3 +59,27 @@ def id_search():
result.update(image)

return render_template('record.html', results=results)

# route for country search page
@search.route('/search/country/', methods=['GET', 'POST'])
def country_search():
if request.method == 'POST':
country_code = request.form.get('country_code')
core = request.form.get('core')
sort = request.form.get('sort')
else:
country_code = request.args.get('country_code')
core = request.args.get('core')
sort = request.args.get('sort')
if country_code is None:
return redirect(url_for('main.index'))
if core is None:
core = 'all'
if sort is None:
sort = 'relevance'
search_results = solr.country_search(core, sort, country_code)
results = search_results[0]
num_found = search_results[1]
total_number = solr.get_total_number(core)

return render_template('search.html', results=results, num_found=num_found, total_number=total_number, country_code=country_code, core=core, sort=sort)

+ 32
- 2
web/app/solr.py Visa fil

@@ -17,7 +17,7 @@ from . import ops
solr_hostname = os.environ.get('SOLR_HOSTNAME')
solr_port = os.environ.get('SOLR_PORT')

def solr_search(core, sort, search=None, id=None):
def content_search(core, sort, search=None, id=None):

# Assemble a query string to send to Solr. This uses the Solr hostname from config.env. Solr's query syntax can be found at many sites including https://lucene.apache.org/solr/guide/6_6/the-standard-query-parser.html
if id is not None:
@@ -49,6 +49,36 @@ def solr_search(core, sort, search=None, id=None):
output.append(result_output)
return output, num_found

def country_search(core, sort, country_code):

# Assemble a query string to send to Solr. This uses the Solr hostname from config.env. Solr's query syntax can be found at many sites including https://lucene.apache.org/solr/guide/6_6/the-standard-query-parser.html
if (sort == 'relevance'):
solrurl = 'http://' + solr_hostname + ':' + solr_port + '/solr/' + core + '/select?q.op=OR&q=%7B!term%20f%3Dcountry%7D' + country_code + '&wt=json'
else:
solrurl = 'http://' + solr_hostname + ':' + solr_port + '/solr/' + core + '/select?q.op=OR&q=%7B!term%20f%3Dcountry%7D' + country_code + '&wt=json&sort=' + sort

# get result
request = requests.get(solrurl)
# turn the API response into useful Json
json = request.json()

num_found = json['response']['numFound']

if (num_found == 0):
output = 'no results found'
else:
output = []
for result in json['response']['docs']:
# set ID variable
id = result['id']
# set content variable
content = result['content']
# parse result
result_output = parse_result(id, content)
output.append(result_output)

return output, num_found

def parse_result(id, input):

output = {}
@@ -179,7 +209,7 @@ def get_total_number(core):
def get_term_data(field, core):

# Assemble a query string to send to Solr. This uses the Solr hostname from config.env. Solr's query syntax can be found at many sites including https://lucene.apache.org/solr/guide/6_6/the-standard-query-parser.html
solrurl = 'http://' + solr_hostname + ':' + solr_port + '/solr/' + core + '/terms?terms.fl=' + field + '&wt=json&terms.limit=1000'
solrurl = 'http://' + solr_hostname + ':' + solr_port + '/solr/' + core + '/terms?terms.fl=' + field + '&wt=json&terms.limit=1000&terms.sort=index'

# get result
request = requests.get(solrurl)

+ 7
- 2
web/app/templates/data.html Visa fil

@@ -24,9 +24,14 @@ There are a total of {{ total_number }} patents.
{{ country_data[i] }}<br>
{% else %}
{% if country_data[i].name is defined %}
{{ country_data[i].name }} {{ country_data[i].flag }}:
<a href="{{ url_for('search.country_search', country_code=country_data[i].alpha_2) }}">
{{ country_data[i].name }}
</a>
{{ country_data[i].flag }}:
{% else %}
{{ country_data[i] }}:
<a href="{{ url_for('search.country_search', country_code=country_data[i]) }}">
{{ country_data[i] }}:
</a>
{% endif %}
{% endif %}
{% endfor %}

+ 7
- 0
web/app/templates/search.html Visa fil

@@ -11,8 +11,13 @@
</div>

<div class="row p-3">
{% if search is defined %}
<form action="{{ url_for('search.basic_search') }}" method="POST">
<input type="hidden" name="search" value="{{ search }}">
{% elif country_code is defined %}
<form action="{{ url_for('search.country_search') }}" method="POST">
<input type="hidden" name="country_code" value="{{ country_code }}">
{% endif %}
<input type="hidden" name="searchopt" value="{{ core }}">
sort by:
<select name="sort" id="sort" onchange="this.form.submit()">
@@ -86,8 +91,10 @@

{% endif %}

{% if search is defined %}
<script type="text/javascript">
highlightSearchTerms({{ search|tojson}})
</script>
{% endif %}

{% endblock %}

Laddar…
Avbryt
Spara