2011-07-18 228 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