2011-07-18 223 views
1

我剛剛安裝並設置了乾草堆和solr與django 1.3,但是當我搜索(與乾草堆默認模板)時,我什麼都沒有。我複製並粘貼solr模式並更新我的索引,但我沒有得到任何結果。也許我的模型/表格沒有連接到solr?我該如何解決?我不知道發生了什麼事...找不到搜索結果

感謝一堆!

補充信息:

模式

<?xml version="1.0" ?> 

<schema name="default" version="1.1"> 
    <types> 
<fieldtype name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> 
<fieldType name="boolean" class="solr.BoolField" sortMissingLast="true" omitNorms="true"/> 

<!-- 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="sint" class="solr.SortableIntField" sortMissingLast="true" omitNorms="true"/> 
<fieldType name="slong" class="solr.SortableLongField" sortMissingLast="true" omitNorms="true"/> 
<fieldType name="sfloat" class="solr.SortableFloatField" sortMissingLast="true" omitNorms="true"/> 
<fieldType name="sdouble" class="solr.SortableDoubleField" sortMissingLast="true" omitNorms="true"/> 

<fieldType name="date" class="solr.DateField" sortMissingLast="true" omitNorms="true"/> 

<fieldType name="text" class="solr.TextField" positionIncrementGap="100"> 
    <analyzer type="index"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <!-- 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.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
    </analyzer> 
    <analyzer type="query"> 
    <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPorterFilterFactory" protected="protwords.txt"/> 
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
    </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="sint" indexed="true" stored="true"/> 
    <dynamicField name="*_s" type="string" indexed="true" stored="true"/> 
    <dynamicField name="*_l" type="slong" indexed="true" stored="true"/> 
    <dynamicField name="*_t" type="text" indexed="true" stored="true"/> 
    <dynamicField name="*_b" type="boolean" indexed="true" stored="true"/> 
    <dynamicField name="*_f" type="sfloat" indexed="true" stored="true"/> 
    <dynamicField name="*_d" type="sdouble" indexed="true" stored="true"/> 
    <dynamicField name="*_dt" type="date" indexed="true" stored="true"/> 


    <field name="text" type="text" indexed="true" stored="true" multiValued="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>text</defaultSearchField> 

    <!-- SolrQueryParser configuration: defaultOperator="AND|OR" --> 
    <solrQueryParser defaultOperator="AND" /> 
</schema> 

search_indexes:

class PostIndex(SearchIndex): 
    text = CharField(document=True, use_template=False) 

    def index_queryset(self): 
     """Used when the entire index for model is updated.""" 
     return Post.objects.all() 


site.register(Post, PostIndex) 

search_config:

import haystack 

haystack.autodiscover() 

設置:

HAYSTACK_SITECONF = 'site.search_config' 
HAYSTACK_SEARCH_ENGINE = 'solr' 
HAYSTACK_SOLR_URL = 'http://127.0.0.1:8983/solr' 

謝謝!

+1

你能發佈更多的信息,比如你的搜索索引嗎? –

+0

增加了新的信息,你需要別的嗎? – Derek

+0

@Derek你安裝了什麼版本的Solr? Haystack說1.3+,包括最新的Solr 3.3.0嗎? – avatar

回答

1

您需要以某種方式填充搜索索引中的字段text;將其映射到模型字段 - 或 - use a template for this!首先你應該使用模板,因此設置use_template=True並添加一個模板。有關如何創建模板文件的更多信息,請閱讀this paragraph

+0

cool thx,你能告訴我爲什麼你需要這個嗎?另外我注意到,你總是需要選擇模型來搜索,你如何搜索所有模型或某些幾個模型,而不使用複選框?你每次更改search_indexes或其他時間時都會更新索引嗎? – Derek

+0

再次感謝一堆! – Derek