Solr中DateField到TrieDateField的转换

Solr中DateField到TrieDateField的转换,solr,drupal-6,Solr,Drupal 6,我正在使用ApacheSolr为Drupal站点中的搜索功能提供动力,它使用了Drupal的一个模块,名为。我是Solr的新手,对它有基本的了解,因此如果这个问题听起来很离谱,我希望提前表达我的歉意 我通过drupal的一个名为ds_myDate的钩子添加了一个日期字段,我最初使用它对搜索结果进行排序。我决定使用a,这样搜索结果将根据相关性显示,并根据日期提升,而不仅仅是按日期降序显示。一旦我通过添加一个boost字段作为recip(ms(NOW/HOUR,ds_myDate),3.16e-11

我正在使用ApacheSolr为Drupal站点中的搜索功能提供动力,它使用了Drupal的一个模块,名为。我是Solr的新手,对它有基本的了解,因此如果这个问题听起来很离谱,我希望提前表达我的歉意

我通过drupal的一个名为
ds_myDate
的钩子添加了一个日期字段,我最初使用它对搜索结果进行排序。我决定使用a,这样搜索结果将根据相关性显示,并根据日期提升,而不仅仅是按日期降序显示。一旦我通过添加一个boost字段作为
recip(ms(NOW/HOUR,ds_myDate),3.16e-11,1,1)来更新我的hook以实现相同的功能
我得到一个HTTP 400错误,声明

无法对非数字的旧日期字段ds\u myDate使用ms()函数

谷歌搜索同样的结果表明,我使用TrieDateField而不是Legacy DateField来防止这个错误。按照建议的命名约定添加名为
tds\u myDate
的TrieDate字段,并将boost实现为
recip(ms(NOW/HOUR,tds\u myDate),3.16e-11,1,1)
,确实有效地实现了增强。但是,这需要我重新索引所有内容(接近500k条记录),以填充新的TrieDate字段,以便能够有效地使用它


我想知道,除了重新索引我的所有内容,比如将我的
ds_myDate
转换为TrieDate字段,比如在mysql表字段上运行alter查询以更改其类型,是否还有有效的解决方法。由于我不熟悉Solr的工作原理,我会要求知道这样一个选项是否可行,以及在这种情况下应该做什么。

不幸的是,一旦文档以某种方式被索引,并且您更改了模式,在对现有文档重新编制索引之前,不能将新架构更改应用于这些文档


有关更多详细信息,请参阅上一个问题。

不幸的是,一旦文档以某种方式编制了索引,并且您更改了架构,在重新编制这些文档的索引之前,您无法将新架构更改应用于现有文档


有关更多详细信息,请参阅上一个问题。

您可以通过执行部分更新来实现,但为此,您需要在Solr 4+上启用并存储所有索引字段

以下是我的看法:

  • 确保Solr的版本为4+
  • 确保存储了所有索引字段(要求部分更新)
  • 如果满足上述两个条件,则编写一个脚本(PHP),该脚本执行以下操作:
  • 1) 遍历完整的Solr索引,对于每个文档:
  • ----a) 读取存储在ds_myDate字段中的值
  • ----b) 将其转换为TrieDateField格式
  • ----c) 通过对仅tds_myDate字段的部分更新推到Solr上(参见示例查询)
示例查询:

curl'localhost:8983/solr/update?commit=true'-H'内容类型:application/json'-d'[{“id”:“$id”,“tds_myDate”:{“set”:$converted_Val}}]'


有关部分更新的更多详细信息:

您可以通过执行部分更新来实现,但为此,您需要在Solr 4+上启用并存储所有索引字段

以下是我的看法:

  • 确保Solr的版本为4+
  • 确保存储了所有索引字段(要求部分更新)
  • 如果满足上述两个条件,则编写一个脚本(PHP),该脚本执行以下操作:
  • 1) 遍历完整的Solr索引,对于每个文档:
  • ----a) 读取存储在ds_myDate字段中的值
  • ----b) 将其转换为TrieDateField格式
  • ----c) 通过对仅tds_myDate字段的部分更新推到Solr上(参见示例查询)
示例查询:

curl'localhost:8983/solr/update?commit=true'-H'内容类型:application/json'-d'[{“id”:“$id”,“tds_myDate”:{“set”:$converted_Val}}]'


有关部分更新的更多详细信息:

非常感谢您提供的清晰度和链接。非常感谢。非常感谢你的清晰和链接。非常感谢。非常感谢您的回复,在我的情况下,date字段和TrieDate字段中的值都将是ISO-8601格式的相同日期值。我会尝试试一试并让您知道。非常感谢您的回复,在我的情况下,DateField和TrieDate字段中的值都将是ISO-8601格式的相同日期值。我会试着试一试,让你知道。