未提供项目描述
项目描述
ckanext-search-tweaks
提供对搜索结果、排序等控制的工具集。
需求
与核心CKAN版本的兼容性
CKAN版本 | 兼容? |
---|---|
2.8及之前 | 不兼容 |
2.9 | 兼容 |
安装
要安装ckanext-search-tweaks
-
激活您的CKAN虚拟环境,例如
. /usr/lib/ckan/default/bin/activate
-
在虚拟环境上安装它
pip install ckanext-search-tweaks
-
将
search_tweaks
添加到您的CKAN配置文件中的ckan.plugins
设置(默认配置文件位于/etc/ckan/default/ckan.ini
)。 -
重启CKAN。
用法
此扩展由多个插件组成。search_tweaks
是主要的(主要)插件,必须始终启用。根据设置的次要(次要)插件集,可能会提供额外的功能和配置选项。以下列出了所有插件及其副作用。
插件 | 功能 |
---|---|
search_tweaks | 允许所有其他插件启用 |
search_tweaks_query_relevance | 推广当前搜索查询访问频率最高的数据集 |
search_tweaks_field_relevance | 根据字段值推广数据集 |
search_tweaks_spellcheck | 提供“你是指”功能 |
search_tweaks
提供所有其他插件使用的基功能和基本逻辑。只要至少启用此扩展的一个其他插件,就必须启用。
-
如果没有指定,则将搜索切换到
edismax
查询解析器 -
启用
ckanext.search_tweaks.iterfaces.ISearchTweaks
接口,具有以下方法def get_search_boost_fn(self, search_params: dict[str, Any]) -> Optional[str]: """Returns optional boost function that will be applied to the search query. """ return None def get_extra_qf(self, search_params: dict[str, Any]) -> Optional[str]: """Return an additional fragment of the Solr's qf. This fragment will be appended to the current qf """ return None
命令行界面
ckan search-tweaks -
Root of all the extension specific commands.
Every command from minor plugins is registered under this section.
配置设置
# Rewrite the default value of the qf parameter sent to Solr
# (optional, default: value of ckan.lib.search.query.QUERY_FIELDS).
ckanext.search_tweaks.common.qf = title^5 text
# Search by misspelled queries.
# (optional, default: false).
ckanext.search_tweaks.common.fuzzy_search.enabled = on
# Maximum number of misspelled letters. Possible values are 1 and 2.
# (optional, default: 1).
ckanext.search_tweaks.common.fuzzy_search.distance = 2
# Use `boost` instead of `bf` when `edismax` query parser is active
# (optional, default: true).
ckanext.search_tweaks.common.prefer_boost = no
# MinimumShouldMatch used in queries
# (optional, default: 1).
ckanext.search_tweaks.common.mm = 2<-1 5<80%
# Keep original query when using fuzzy search, e.g. "(hello~2) OR (hello)" if true
# (optional, default: true).
ckanext.search_tweaks.common.fuzzy_search.keep_original
search_tweaks_query_relevance
根据在运行此搜索后数据集的直接访问次数增加特定查询的数据集的相关性。例如,如果用户搜索某个内容
然后访问数据集B,该数据集最初显示在搜索结果的第三行,最终该数据集将显示在第二行或甚至第一行。这分三个阶段实现。在第一阶段,收集统计信息并存储在存储(默认为redis)中,然后通过cronjob将此统计信息转换为数字solr字段。最后,在搜索期间应用Solr的boost函数,该函数调整访问次数并提高给定查询的得分。
以下步骤是配置此插件所需的
-
将存储统计信息的字段添加到schema.xml中(
query_relevance_
前缀可以通过配置选项更改)<dynamicField name="query_relevance_*" type="int" indexed="true" stored="true"/>
-
配置一个定期更新搜索索引的cronjob
0 0 * * * ckan search-index rebuild
命令行界面
relevance query align - remove old data from storage. Actual result of this command depends
on storage backend, that is controlled by config. At the momment, only `redis-daily` backend
is affected by this command - all records older than `query_relevance.daily.age` days are removed.
relevance query export - export statistics as CSV.
relevance query import - import statistics from CSV. Note, records that are already in storage but
are not listed in CSV won't be removed. It must be done manually
配置设置
# Which backend to use in order to collect information about dataset
# relevance for the particular search query. Possible values are:
# "redis-permanent", "redis-daily"
# (optional, default: redis-daily).
ckanext.search_tweaks.query_relevance.backend = redis-permanent
# How long(in days) information about dataset visits will be stored in order to
# update relevance of dataset in search query.
# (optional, default: 90).
ckanext.search_tweaks.query_relevance.daily.age = 90
# Solr boost function with $field placeholder that will be replaced by
# the correspoinding field name
# (optional, default: "scale(def($field,0),1,1.2)").
ckanext.search_tweaks.query_relevance.boost_function = recip($field,1,1000,1000)
# Prefix of the numeric field defined in Solr schema. This field will hold
# dataset's relevance for the given query.
# (optional, default: query_relevance_).
ckanext.search_tweaks.query_relevance.field_prefix = custom_score_
search_tweaks_field_relevance
根据其数字字段的值增加数据集的相关性。目前无法使用具有文本类型的字段推广数据集。
这里也没有魔法,此插件允许您指定在所有搜索期间使用的Solr的boost函数。可以通过使用ISearchTweaks.get_search_boost_fn
达到完全相同的结果。但是,我预计这个选项会被经常使用,因此有更新相关性的可能性,而不需要任何额外的代码行。
配置设置
# Solr boost function for static numeric field
# (optional, default: None).
ckanext.search_tweaks.field_relevance.boost_function = pow(promoted_level,2)
# Field with dataset promotion level
# (optional, default: promotion_level).
ckanext.search_tweaks.field_relevance.blueprint.promotion.field_name = promotion
# Register pacakge promotion route
# (optional, default: False).
ckanext.search_tweaks.field_relevance.blueprint.promotion.enabled = true
认证函数
search_tweaks_field_relevance_promote: access package promotion route. Calls `package_update` by default.
search_tweaks_spellcheck
将Solr的拼写检查组件的搜索建议公开给CKAN模板。此插件本身并不做什么,主要依赖于Solr的内置功能。因此,您需要对Solr进行大量更改才能使用它
-
solrconfig.xml
。配置拼写检查组件。在<searchComponent name="spellcheck" class="solr.SpellCheckComponent">
部分中搜索,并将其下的以下项添加到其中<lst name="spellchecker"> <str name="name">did_you_mean</str> <str name="field">did_you_mean</str> <str name="buildOnCommit">false</str> </lst>
-
添加一个cronjob,定期更新建议字典
ckan search-tweaks spellcheck rebuild
-
solrconfig.xml
。将拼写检查组件添加到搜索处理程序(<requestHandler name="/select" class="solr.SearchHandler">
)<arr name="last-components"> <str>spellcheck</str> </arr>
-
在模式中定义拼写检查字段。如果您想使用现有的字段(例如,
text
),请在solrconfig.xml
中将<str name="field">did_you_mean</str>
的值更改为所选字段的名称。<field name="did_you_mean" type="textgen" indexed="true" multiValued="true" />
-
注意:如果您在上一步中决定使用现有字段,请跳过此步骤。
将有效值复制到该字段中<copyField source="title" dest="did_you_mean"/> <copyField source="notes" dest="did_you_mean"/> <copyField source="res_name" dest="did_you_mean"/> <copyField source="res_description" dest="did_you_mean"/> <copyField source="extras_*" dest="did_you_mean"/>
之后,您必须重新启动Solr服务并重建搜索索引
ckan search-index rebuild
现在您可以使用spellcheck_did_you_mean
模板辅助程序,当可用时返回更好的搜索查询而不是当前的查询。请考虑在搜索表单下包含search_tweaks/did_you_mean.html
片段。
配置设置
# Do not show suggestions that have fewer results than current query
# (optional, default: true).
ckanext.search_tweaks.spellcheck.more_results_only = off
# How many different suggestions you expect to see for query
# (optional, default: 1).
ckanext.search_tweaks.spellcheck.max_suggestions = 3
命令行界面
spellcheck rebuild - rebuild/reload spellcheck dictionary.
开发者安装
为了开发安装ckanext-search-tweaks,激活您的CKAN虚拟环境,然后执行以下操作:
git clone https://github.com/DataShades/ckanext-search-tweaks.git
cd ckanext-search-tweaks
python setup.py develop
pip install -r dev-requirements.txt
测试
除了CKAN测试的默认配置外,您还需要创建 ckan_search_tweaks
Solr的核心,用 ckanext/search_tweaks/tests/schema.xml
替换其模式,并对 solrconfig.xml
进行必要的修改,以满足 search_tweaks_spellcheck
的需求。
要运行测试,请执行
pytest --ckan-ini=test.ini ckanext/search_tweaks/tests
许可证
项目详情
下载文件
下载适用于您平台的文件。如果您不确定该选择哪个,请了解有关 安装包 的更多信息。
源分发
构建分发
ckanext_search_tweaks-0.6.1.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | f96b4b4c826cabf55c015a623495def5deb31e8ed8bf223ef96ce8b2707e11fb |
|
MD5 | 0ce574f3b2ac0f8f79440d11b4170f6a |
|
BLAKE2b-256 | 7df4ffc119974727c95504ffeca94e282743f22b156e00b819ef194cbc6b8815 |
ckanext_search_tweaks-0.6.1-py3-none-any.whl 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | dcff8d668744d8d8c614ed8a89659d4586eff371a7f1220fc41fbc2ac1e0aa99 |
|
MD5 | e4878eea28d952d2d6fce907020f5876 |
|
BLAKE2b-256 | 4d0dae824453915ea604e921a174704bff566612fb5b295584df0309e9e2b86f |