Solr 返回更多值的方式
Solr returning way more values
使用 Django 2.2.7、Python 3.6.9、PySolr 3.8.1、DJANGO Haystack 2.8.1
haystack_conn = {}
search_engine = 'solr'
if search_engine == 'whoosh':
haystack_conn = {
'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
'PATH': os.path.join(os.path.dirname(__file__), 'whoosh_index'),
}
elif search_engine == 'solr':
haystack_conn = {
'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
'URL': 'http://127.0.0.1:8983/solr/bsd',
}
elif search_engine == 'elastic_search':
haystack_conn = {
'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
'URL': 'http://127.0.0.1:9200/',
'INDEX_NAME': 'artifacts',
}
HAYSTACK_CONNECTIONS = {
'default': haystack_conn,
}
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
HAYSTACK_SEARCH_RESULTS_PER_PAGE = 10
当我搜索前任时。 ios 我得到 250 个结果。当我搜索 ios 10 时,我得到了 500 个结果,虽然我应该得到更少..大约 90.
为您的字段使用字符串类型 artifact_name,如下所示。
<fieldType class="solr.StrField" name="string" omitNorms="true" sortMissingLast="true" />
(以上行必须在您的 schema.xml 中。)
<field name="artifact_name" type="string" indexed="true" stored="true" multiValued="false" />
或者您也可以使用其他方法,如下所示。
<fieldType name="customFieldType" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
<field name="artifact_name" type="customFieldType" indexed="true" stored="true" multiValued="false" />
如果以后有人搜索这个
在 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="df">text_en</str>
<str name="q.op">AND</str>
</lst>
</requestHandler>
使用 Django 2.2.7、Python 3.6.9、PySolr 3.8.1、DJANGO Haystack 2.8.1
haystack_conn = {}
search_engine = 'solr'
if search_engine == 'whoosh':
haystack_conn = {
'ENGINE': 'haystack.backends.whoosh_backend.WhooshEngine',
'PATH': os.path.join(os.path.dirname(__file__), 'whoosh_index'),
}
elif search_engine == 'solr':
haystack_conn = {
'ENGINE': 'haystack.backends.solr_backend.SolrEngine',
'URL': 'http://127.0.0.1:8983/solr/bsd',
}
elif search_engine == 'elastic_search':
haystack_conn = {
'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
'URL': 'http://127.0.0.1:9200/',
'INDEX_NAME': 'artifacts',
}
HAYSTACK_CONNECTIONS = {
'default': haystack_conn,
}
HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'
HAYSTACK_SEARCH_RESULTS_PER_PAGE = 10
当我搜索前任时。 ios 我得到 250 个结果。当我搜索 ios 10 时,我得到了 500 个结果,虽然我应该得到更少..大约 90.
为您的字段使用字符串类型 artifact_name,如下所示。
<fieldType class="solr.StrField" name="string" omitNorms="true" sortMissingLast="true" />
(以上行必须在您的 schema.xml 中。)
<field name="artifact_name" type="string" indexed="true" stored="true" multiValued="false" />
或者您也可以使用其他方法,如下所示。
<fieldType name="customFieldType" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
<analyzer type="query">
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory" />
</analyzer>
</fieldType>
<field name="artifact_name" type="customFieldType" indexed="true" stored="true" multiValued="false" />
如果以后有人搜索这个
在 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="df">text_en</str>
<str name="q.op">AND</str>
</lst>
</requestHandler>