跳转到主要内容

未提供项目描述

项目描述

Tests

ckanext-search-tweaks

提供对搜索结果、排序等控制的工具集。

需求

与核心CKAN版本的兼容性

CKAN版本 兼容?
2.8及之前 不兼容
2.9 兼容

安装

要安装ckanext-search-tweaks

  1. 激活您的CKAN虚拟环境,例如

     . /usr/lib/ckan/default/bin/activate
    
  2. 在虚拟环境上安装它

     pip install ckanext-search-tweaks
    
  3. search_tweaks添加到您的CKAN配置文件中的ckan.plugins设置(默认配置文件位于/etc/ckan/default/ckan.ini)。

  4. 重启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

许可证

AGPL

项目详情


下载文件

下载适用于您平台的文件。如果您不确定该选择哪个,请了解有关 安装包 的更多信息。

源分发

ckanext_search_tweaks-0.6.1.tar.gz (42.5 kB 查看散列)

上传时间

构建分发

ckanext_search_tweaks-0.6.1-py3-none-any.whl (49.5 kB 查看散列)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面