From 8e73a32875bcd184fcf7fcc3ef3cf8dbf0d83a21 Mon Sep 17 00:00:00 2001 From: Simon Edwards Date: Fri, 24 Jul 2015 13:29:24 +0100 Subject: [PATCH] Make Elasticsearch searched fields configurable This allows fields stuch as "content" to be searchable when using Elasticsearch Add config item ELASTICSEARCH_FIELDS, list of fields to search. Defaults to just "name" to preserve existing behaviour Available fields are: - "name" - "username" - "content" - "message" --- realms/config/__init__.py | 1 + realms/modules/search/models.py | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/realms/config/__init__.py b/realms/config/__init__.py index ebf6829..6574c9f 100644 --- a/realms/config/__init__.py +++ b/realms/config/__init__.py @@ -99,6 +99,7 @@ SEARCH_TYPE = 'simple' # simple is not good for large wikis # SEARCH_TYPE = 'elasticsearch' ELASTICSEARCH_URL = 'http://127.0.0.1:9200' +ELASTICSEARCH_FIELDS = ["name"] # SEARCH_TYPE = 'whoosh' WHOOSH_INDEX = '/tmp/whoosh' diff --git a/realms/modules/search/models.py b/realms/modules/search/models.py index 8950d4d..267c5c5 100644 --- a/realms/modules/search/models.py +++ b/realms/modules/search/models.py @@ -14,7 +14,8 @@ def whoosh(app): def elasticsearch(app): from flask.ext.elastic import Elastic - return ElasticSearch(Elastic(app)) + fields = app.config.get('ELASTICSEARCH_FIELDS') + return ElasticSearch(Elastic(app), fields) class Search(object): @@ -125,8 +126,9 @@ class WhooshSearch(BaseSearch): class ElasticSearch(BaseSearch): - def __init__(self, elastic): + def __init__(self, elastic, fields): self.elastic = elastic + self.fields = fields def index(self, index, doc_type, id_=None, body=None): return self.elastic.index(index=index, doc_type=doc_type, id=id_, body=body) @@ -144,7 +146,7 @@ class ElasticSearch(BaseSearch): res = self.elastic.search(index='wiki', body={"query": { "multi_match": { "query": query, - "fields": ["name"] + "fields": self.fields }}}) return [hit["_source"] for hit in res['hits']['hits']]