我得到了一个升级Solr
的任务,hovewer从未与Solr
合作过。 目前我有一个堆:Django的1.9.12 +奥斯卡1.3 + Solr的6.3.0 +草堆2.5.1将Solr 4.10升级到6.3后,搜索停止工作
我有Haystack
生成的架构,把它放在managed-schema
文件,并修改根据位的StackOverflow的答案,因为Solr
不想开始。 现在我有Solr开始,但通过网站的搜索字段找不到任何东西(与Solr 4.10一起搜索工作正常,没有任何问题)。
在下面的部分solrconfig.xml
:
<requestHandler name="/select" class="solr.SearchHandler">
<!-- default values for query parameters can be specified, these
will be overridden by parameters in the request
-->
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
</lst>
我尝试添加:
<str name="df">text</str>
<str name="q.op">AND</str>
,搜索部分开始工作后。
几个例子:
有这样的项目
INTEL Pentium G3260 (CM8064601482506)
,搜索的工作原理只是INTEL Pentium
或CM8064601482506
。如果我想查找INTEL Pentium G3260
或Pentium G3260
或INTEL G3260
或G3260
- 无结果。Search string:
AMD a8-6500;Result:
没有显示(无结果) - >应该找到AMD a8-6500Search string:
AMD;Result:
显示所有AMD产品 - >如预期
如果我改变<str name="q.op">AND</str>
到<str name="q.op">OR</str>
:
Search string:
AMD a8-6500;Result:
AMD A8-6500显示所有AMD和 A8-6500 - >应该找到刚才AMD a8-6500Search string:
a8-6500;Result:
AMD A8-6500(AD650BOKA44HL)和 INTEL酷睿™i5 6500 - >应该找到刚才AMD a8-6500
我现在solrconfig.xml和managed-schema在GitHub上。
作为目前索引字段我用EdgeNgramField
,即:
from haystack import indexes
class ProductIndexes(indexes.SearchIndex, indexes.Indexable):
text = indexes.EdgeNgramField(
document=True, use_template=True,
template_name='search/indexes/cpu/item_text.txt')
如何修复\正常化搜索?
更新1:在仪表板的登录页面 警告
[default] default search field in schema is text. WARNING: Deprecated,​ please use 'df' on request instead.
[default] query parser default operator is AND. WARNING: Deprecated,​ please use 'q.op' on request instead.
可以通过从managed-schema
文件中删除
<defaultSearchField>text</defaultSearchField>
<solrQueryParser defaultOperator="AND"/>
固定
更新2: 基于Socratees的答案,这里是最后的修改:
在接下来的代码
indexes.EdgeNgramField
:class ProductIndexes(indexes.SearchIndex, indexes.Indexable): text = indexes.EdgeNgramField( document=True, use_template=True, template_name='search/indexes/cpu/item_text.txt')
更改为
indexes.CharField
。正如我有其它字段与
indexes.CharField
,在managed-schema
我发现,这些字段使用类型text_en
,和从替换fieldType name="text_en"
:
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<!-- in this example, we will only use synonyms at query time
<filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
-->
<!-- Case insensitive stop word removal.
-->
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="lang/stopwords_en.txt"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
<filter class="solr.EnglishMinimalStemFilterFactory"/>
-->
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="lang/stopwords_en.txt"
/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.EnglishPossessiveFilterFactory"/>
<filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/>
<!-- Optionally you may want to use this less aggressive stemmer instead of PorterStemFilterFactory:
<filter class="solr.EnglishMinimalStemFilterFactory"/>
-->
<filter class="solr.PorterStemFilterFactory"/>
</analyzer>
</fieldType>
haystack
,发送给:
<fieldType name="text_en" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.StandardTokenizerFactory"/>
<filter class="solr.StandardFilterFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
- 在
sorlconfig.xml
的代码:
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
</lst>
</requestHandler>
更改为:
<requestHandler name="/select" class="solr.SearchHandler">
<lst name="defaults">
<str name="echoParams">explicit</str>
<int name="rows">10</int>
<str name="df">text</str>
<str name="q.op">AND</str>
</lst>
</requestHandler>
我明白这一点,但如何解决\删除此页面的警告:http:// localhost:8983/solr /#/〜logging? – TitanFighter