From: Marcin Koziej <marcin.koziej@nowoczesnapolska.org.pl> Date: Mon, 27 Aug 2012 14:27:12 +0000 (+0200) Subject: entry searching works X-Git-Url: https://git.mdrn.pl/prawokultury.git/commitdiff_plain/999340c55d5402900dd013ab5ced2413cd4f22f8?hp=b1fb752ca1abb051a63da4729e34a80affc25c76 entry searching works --- diff --git a/doc/schema.xml b/doc/schema.xml deleted file mode 100644 index 236b417..0000000 --- a/doc/schema.xml +++ /dev/null @@ -1,160 +0,0 @@ -<?xml version="1.0" ?> -<!-- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. ---> - -<schema name="default" version="1.4"> - <types> - <fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> - <fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/> - <fieldtype name="binary" class="solr.BinaryField"/> - - <!-- Numeric field types that manipulate the value into - a string value that isn't human-readable in its internal form, - but with a lexicographic ordering the same as the numeric ordering, - so that range queries work correctly. --> - <fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/> - <fieldType name="float" class="solr.TrieFloatField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/> - <fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/> - <fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" omitNorms="true" sortMissingLast="true" positionIncrementGap="0"/> - - <fieldType name="tint" class="solr.TrieIntField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> - <fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> - <fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> - <fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> - - <fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="0" positionIncrementGap="0"/> - <!-- A Trie based date field for faster date range queries and date faceting. --> - <fieldType name="tdate" class="solr.TrieDateField" omitNorms="true" precisionStep="6" positionIncrementGap="0"/> - - <fieldType name="point" class="solr.PointType" dimension="2" subFieldSuffix="_d"/> - <fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/> - <fieldtype name="geohash" class="solr.GeoHashField"/> - - <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> - <analyzer type="index"> - <tokenizer class="solr.StandardTokenizerFactory"/> - <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> - <!-- in this example, we will only use synonyms at query time - <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> - --> - <filter class="solr.LowerCaseFilterFactory"/> - </analyzer> - <analyzer type="query"> - <tokenizer class="solr.StandardTokenizerFactory"/> - <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> - <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> - <filter class="solr.LowerCaseFilterFactory"/> - </analyzer> - </fieldType> - - <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100"> - <analyzer type="index"> - <tokenizer class="solr.StandardTokenizerFactory"/> - <filter class="solr.StopFilterFactory" - ignoreCase="true" - words="stopwords_en.txt" - enablePositionIncrements="true" - /> - <filter class="solr.LowerCaseFilterFactory"/> - <filter class="solr.EnglishPossessiveFilterFactory"/> - <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> - <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory: - <filter class="solr.EnglishMinimalStemFilterFactory"/> - --> - <filter class="solr.PorterStemFilterFactory"/> - </analyzer> - <analyzer type="query"> - <tokenizer class="solr.StandardTokenizerFactory"/> - <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> - <filter class="solr.StopFilterFactory" - ignoreCase="true" - words="stopwords_en.txt" - enablePositionIncrements="true" - /> - <filter class="solr.LowerCaseFilterFactory"/> - <filter class="solr.EnglishPossessiveFilterFactory"/> - <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> - <!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory: - <filter class="solr.EnglishMinimalStemFilterFactory"/> - --> - <filter class="solr.PorterStemFilterFactory"/> - </analyzer> - </fieldType> - - <fieldType name="text_ws" class="solr.TextField" positionIncrementGap="100"> - <analyzer> - <tokenizer class="solr.WhitespaceTokenizerFactory"/> - </analyzer> - </fieldType> - - <fieldType name="ngram" class="solr.TextField" > - <analyzer type="index"> - <tokenizer class="solr.KeywordTokenizerFactory"/> - <filter class="solr.LowerCaseFilterFactory"/> - <filter class="solr.NGramFilterFactory" minGramSize="3" maxGramSize="15" /> - </analyzer> - <analyzer type="query"> - <tokenizer class="solr.KeywordTokenizerFactory"/> - <filter class="solr.LowerCaseFilterFactory"/> - </analyzer> - </fieldType> - - <fieldType name="edge_ngram" class="solr.TextField" positionIncrementGap="1"> - <analyzer type="index"> - <tokenizer class="solr.WhitespaceTokenizerFactory" /> - <filter class="solr.LowerCaseFilterFactory" /> - <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> - <filter class="solr.EdgeNGramFilterFactory" minGramSize="2" maxGramSize="15" side="front" /> - </analyzer> - <analyzer type="query"> - <tokenizer class="solr.WhitespaceTokenizerFactory" /> - <filter class="solr.LowerCaseFilterFactory" /> - <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> - </analyzer> - </fieldType> - </types> - - <fields> - <!-- general --> - <field name="id" type="string" indexed="true" stored="true" multiValued="false" required="true"/> - <field name="django_ct" type="string" indexed="true" stored="true" multiValued="false"/> - <field name="django_id" type="string" indexed="true" stored="true" multiValued="false"/> - - <dynamicField name="*_i" type="int" indexed="true" stored="true"/> - <dynamicField name="*_s" type="string" indexed="true" stored="true"/> - <dynamicField name="*_l" type="long" indexed="true" stored="true"/> - <dynamicField name="*_t" type="text_en" indexed="true" stored="true"/> - <dynamicField name="*_b" type="boolean" indexed="true" stored="true"/> - <dynamicField name="*_f" type="float" indexed="true" stored="true"/> - <dynamicField name="*_d" type="double" indexed="true" stored="true"/> - <dynamicField name="*_dt" type="date" indexed="true" stored="true"/> - <dynamicField name="*_p" type="location" indexed="true" stored="true"/> - <dynamicField name="*_coordinate" type="tdouble" indexed="true" stored="false"/> - - - </fields> - - <!-- field to use to determine and enforce document uniqueness. --> - <uniqueKey>id</uniqueKey> - - <!-- field for the QueryParser to use when an explicit fieldname is absent --> - <defaultSearchField></defaultSearchField> - - <!-- SolrQueryParser configuration: defaultOperator="AND|OR" --> - <solrQueryParser defaultOperator="AND"/> -</schema> - diff --git a/migdal/helpers.py b/migdal/helpers.py index 39f5a60..1fdbdd4 100644 --- a/migdal/helpers.py +++ b/migdal/helpers.py @@ -34,9 +34,8 @@ def add_translatable(model, fields, languages=None): for name, field in fields.items(): for lang_code, lang_name in languages: new_field = copy(field) - if hasattr(field, 'verbose_name') and field.verbose_name: + if field.verbose_name: new_field.verbose_name = string_concat(field.verbose_name, ' [%s]' % lang_code) - new_field.contribute_to_class(model, "%s_%s" % (name, lang_code)) setattr(model, name, field_getter(name)) # add setter? diff --git a/migdal/search_indexes.py b/migdal/search_indexes.py index 6223b6e..333899f 100644 --- a/migdal/search_indexes.py +++ b/migdal/search_indexes.py @@ -1,13 +1,14 @@ +from django.conf import settings import datetime from haystack import indexes from migdal.models import Entry -from django.conf import settings + from copy import copy class EntryIndex(indexes.SearchIndex, indexes.Indexable): - date = indexes.DateTimeField(indexed=True) - author = indexes.CharField() + date = indexes.DateTimeField(indexed=True, model_attr="date") + author = indexes.CharField(model_attr="author") def get_model(self): return Entry @@ -26,6 +27,7 @@ def add_translatable(index_class, fields, languages=None): new_field = copy(field) fname = "%s_%s" % (name, lang_code) new_field.index_fieldname = fname + new_field.model_attr = fname setattr(index_class, fname, new_field) index_class.fields[fname] = new_field diff --git a/migdal/templates/search/search.html b/migdal/templates/search/search.html index f38a4e6..6d7b9c7 100644 --- a/migdal/templates/search/search.html +++ b/migdal/templates/search/search.html @@ -8,7 +8,7 @@ <h1>{% trans "Search results" %}</h1> {% for result in page.object_list %} -{% entry_short result %} +{% entry_short result.object %} {% empty %} <p>{% trans "No results found." %}</p> {% endfor %}