solr django haystack拼写检查不起作用

时间:2014-07-14 17:28:29

标签: python solr spell-checking django-haystack

我使用solr haystack创建了一个项目,试图在搜索时实现拼写自动更正,但它总是说没有找到结果。

我的search_index课程:

class CrawlIndex(indexes.SearchIndex, indexes.Indexable):
text = indexes.CharField(document=True, use_template=True)
name =indexes.CharField(model_attr='name',faceted=True)
content_auto = indexes.EdgeNgramField(model_attr='name')
suggestions = indexes.FacetCharField()

def prepare(self, obj):
    prepared_data = super(CrawlIndex, self).prepare(obj)
    prepared_data['suggestions'] = prepared_data['text']
    return prepared_data


def get_model(self):
    return Crawl

def index_queryset(self, using=None):
    """Used when the entire index for model is updated."""
    return self.get_model().objects.all()

我需要自动更正的主要字段是name。 我的架构文件是:  

<field name="name_exact" type="string" indexed="true" stored="true" multiValued="false" />

<field name="suggestions" type="string" indexed="true" stored="true" multiValued="false" />

<field name="name" type="text" indexed="true" stored="true" multiValued="false" />

<field name="content_auto" type="edge_ngram" indexed="true" stored="true" multiValued="false" />

<field name="spell" type="textSpell" indexed="true" stored="true" multiValued="true"/>`

solrcongfig文件是:

<searchComponent name="spellcheck" class="solr.SpellCheckComponent">

 <str name="queryAnalyzerFieldType">textSpell</str>
  <lst name="spellchecker">
  <str name="name">default</str>
  <str name="field">spell</str>
  <str name="classname">solr.DirectSolrSpellChecker</str>
  <str name="distanceMeasure">internal</str>
  <float name="accuracy">0.5</float>
  <int name="maxEdits">2</int>
  <int name="minPrefix">1</int>
  <int name="maxInspections">5</int>
  <int name="minQueryLength">4</int>
  <float name="maxQueryFrequency">0.01</float>
 </lst>
 <lst name="spellchecker">
  <str name="name">wordbreak</str>
  <str name="classname">solr.WordBreakSolrSpellChecker</str>      
  <str name="field">name</str>
  <str name="combineWords">true</str>
  <str name="breakWords">true</str>
  <int name="maxChanges">10</int>
 </lst>
</searchComponent>

<requestHandler name="/spell" class="solr.SearchHandler" startup="lazy">
 <lst name="defaults">
  <str name="df">text</str>
  <str name="spellcheck.dictionary">default</str>
  <str name="spellcheck.dictionary">wordbreak</str>
  <str name="spellcheck">on</str>
  <str name="spellcheck.extendedResults">false</str> 
  <str name="spellcheck.onlyMorePopular">true</str>      
  <str name="spellcheck.count">10</str>
  <str name="spellcheck.alternativeTermCount">5</str>
  <str name="spellcheck.maxResultsForSuggest">5</str>       
  <str name="spellcheck.collate">true</str>
  <str name="spellcheck.collateExtendedResults">true</str>  
  <str name="spellcheck.maxCollationTries">10</str>
  <str name="spellcheck.maxCollations">5</str>         
 </lst>
 <arr name="last-components">
 <str>spellcheck</str>
 </arr>
</requestHandler>

0 个答案:

没有答案