我得到了一個升級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