使用haystack SearchQuerySet和Solr转义特殊字符

时间:2013-10-24 17:07:52

标签: python django solr search-engine django-haystack

当我尝试搜索具有特殊字符的内容时,找不到。我在solr_schema.xml中添加了必要的过滤器。

当我使用字符scape搜索Solr(控制台)时,它可以工作。

示例:

 title_element:\+ 

结果:

<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">1</int>
<lst name="params">
<str name="indent">on</str>
<str name="start">0</str>
<str name="q">title_element:\+</str>
<str name="version">2.2</str>
<str name="rows">10</str>
</lst>
</lst>
<result name="response" numFound="1" start="0">
<doc>
<str name="clean_content">textocontilde</str>
<str name="django_ct">core.element</str>
<str name="django_id">28</str>
<str name="id">core.element.28</str>
<str name="text">textocontilde</str>
<str name="title_element">dsfsdfsfd hola+</str>  
</doc>
</result>
</response>

当我尝试使用SearchQuerySet时,不起作用 -

sqs_title_element= SearchQuerySet().autocomplete(title_element='\+')

有什么问题,引擎有配置。

文件类型配置:

 <fieldType name="ngram" class="solr.TextField" >
  <analyzer type="index">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.NGramFilterFactory" minGramSize="1" maxGramSize="15" />
    <filter class="solr.ASCIIFoldingFilterFactory" words="mapping-FoldToASCII.txt"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    <filter class="solr.LowerCaseFilterFactory"/>
    <filter class="solr.ASCIIFoldingFilterFactory" words="mapping-FoldToASCII.txt"/>
    <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
  </analyzer>
</fieldType>

谢谢你的答案。

1 个答案:

答案 0 :(得分:1)

如果您在分析仪中添加此过滤器

<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true"    expand="true"/>

在python代码中执行此操作。

from haystack.inputs import Clean
clean_value = Clean('+')
看起来没有逃脱角色。

需要使用过滤器而不是autoescape。

SearchQuerySet().filter(title_element=clean_value)

我有同样的问题,它对我有用。