2013-10-24 42 views
0

当我尝试搜索带有特殊字符的东西时找不到。我在solr_schema.xml中添加了必要的过滤器。使用草垛搜索特殊字符SearchQuerySet和Solr

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

例子:

 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

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

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

而在Python代码做到这一点。

from haystack.inputs import Clean 
clean_value = Clean('+') 

看起来并没有逃过这个角色。

需要使用filter而不是autoescape。

SearchQuerySet().filter(title_element=clean_value) 

我有同样的问题,它为我工作。

+0

非常感谢,它适用于我。 – Juan