欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

drupal search results teaser limit length apachesolr apache solr search 搜索 增加 长度 截取 teaser fragsize snippets snippet 改变搜索内容的大小 长度 有大用 有大大用 有大大大用

截断
如果您想截断(限制)您的搜索结果描述,您可以通过多种方式来实现,但我将专注于最有效、最直接和最简单的方法,假设受众是那些有 PHP 障碍的人。(像我这样的)

首先,复制您的 search-result.tpl.php 文件并将其放在您的模板文件夹中。如果您已经有一个,那么只需相应地调整您拥有的代码。

其次,使用您喜欢的任何编辑器打开您的文件。我使用 Dreamweaver。您的代码应如下所示:

<?php if ($snippet) : ?>  
    <p class="search-snippet"><?php print $snippet ?></p>  
  <?php endif; ?>  
  <?php if ($info) : ?>  
  <p class="search-info"><?php print $info; ?></p>  
  <?php endif; ?>  

您应该担心的是修改这段代码:

<?php print $snippet ?>

对于这个演示,我们希望将描述长度截断为 100 个字符,并让 PHP 处理在 100 个字符限制内查找前一个或最后一个整个单词。

只需将您的代码更改为:

<?php print substr($snippet, 0, 100); ?>

这就是说:显示字符串 $snippet 共 100 个字符,并从第一个字符 (0) 开始计算字符数。澄清一下,如果我希望它从不同的字符开始计数,我只需将 0 替换为起始字符,这将导致您的描述的一大块。

就是这样。

如果您希望真正让您的描述更加精彩,那么只需按照以下指南进行操作:

描述变量中的内容将是:123456789

I want to display: 12
substr($snippet, 0, 2);

I want to display: 56789
substr($snippet, 4);

I want to display: 89
substr($snippet, -2);

I want to display: 456
substr($snippet, 3, -4);

加长

与上面相同,但您需要确保您的 nutch 和 Solr 实例实际上正在保存并发送您需要的描述量。

确保在 nutch 和 Solr 的 schema.xml 文件中都有这个。更多信息可以在这里找到:http ://wiki.apache.org/solr/SchemaXml
<copyField source="body" dest="teaser" maxChars="800"/>

另外,请尝试确保您具有以下默认值:

<property>
  <name>fetcher.store.content</name>
  <value>true</value>
  <description>If true, fetcher will store content.</description>
</property>

<property>
  <name>http.content.limit</name>
  <value>65536</value>
  <description>The length limit for downloaded content, in bytes.
  If this value is nonnegative (>=0), content longer than it will be truncated;
  otherwise, no truncation at all.
  </description>

您也可以将这些相同的想法用于您的标题。要延长或截断您的标题,您只需修改您的 nutch-site.xml 以包括:

<property>
  <name>indexer.max.title.length</name>
  <value>100</value>
  <description>The maximum number of characters of a title that are indexed.
  </description>
</property>

将其调整为您想要的任何值并截断 search-result.tpl.php 中的标题。使用上面相同的代码。

我还想截断标题以切断管道(|)之后的任何标题所以,我使用了这个:
<?php $title; $parts = explode( '|', $title ); print $parts[0]; ?>

这会将结果截断到第一个管道 (|)。所以代替这个:

我的头衔太长了,我有问题 | 我也使用 | 管道 | 很多

我得到:

我的标题太长了,我有问题

评论

maxmmize 的图片

如果您在突出显示和预告片长度方面遇到问题,您可以在这里很容易地解决这个问题:http: //drupal.org/node/970928

观众:

那些想要突出显示但又想要超过每个关键字 100 个字符限制的人。


来自 https://www.drupal.org/node/968308







添加 UI 以突出显示配置变量

你好,

现在我已经弄清楚如何调整通过 nutch 抓取并通过 Solr 存储的数据量以及如何调整该数据的呈现长度,最后一块仍然存在:

如何在使用突出显示功能时调整预告片长度。

例子:

我在网站上搜索“正义”并获得以下回报:

Cases - All terms
03/22/2010 06/07/2010 Samuel A. Alito, Jr. 8-1 1 2 3 4 5 6 7 8 9 … next › last » Cases Justices Advocates ...

http://www.oyez.org/cases

Supreme Court Tour
Supreme Court Tour | The Oyez Project Skip to Navigation Oyez Site Feedback On The Docket Appellate.net Justia SCOTUSblog Cases Justices Advocates Benefactors About Tour Home › Supreme Court Tour › Supreme Court Tour Printer-friendly version Cases Justices Advocates Benefactors About Tour Footer Links ...

http://www.oyez.org/tour

注意第一个结果我只得到 100 个字符左右?请注意我得到 200 的第二个结果?这是一个问题。发生这种情况是因为“正义”一词在第一个实例中仅出现一次,在第二个实例中出现两次,并且被 ApacheSolr 中的某些登录切断。

我怎么能确定?也许这就是全部?

很简单就能找出来!只需转到 8983 上的 Solr 管理实例。在基本查询中输入确切的关键字并获取结果,然后查看页面源。在那里,您将确切地看到 Solr 在其数据库中用于该查询的内容。对我来说,因为我修改了 nutch/Solr 以保留整个页面,所以我拥有整个页面。所以我知道 ApacheSolr 逻辑正在这样做。

到目前为止我做了什么?

我查看了所有代码,发现了一些有趣的地方。

apachesolr_search.module 第 1464-1477 行
search.module 第 1200-1245 行

我的结果是什么?

没有。我似乎无法调整 ApacheSolr 突出显示部分的长度。

我想要的是:

我想让所有结果的整个搜索片段的长度成为标准,比如说 300 个字符,并保持突出显示,减去它当前使用的字符限制逻辑。

听起来很难?哎呀,是的。这将完成我关于使用 SolrSearch 调整预告片长度的教程http://drupal.org/node/968308 。任何输入都是超级骗子。

评论

maxmmize 的图片

基于此:

http://wiki.apache.org/solr/HighlightingParameters

我一直在调整我的坡度


  <fragmenter name="regex" class="org.apache.solr.highlight.RegexFragmenter">
    <lst name="defaults">
      <!-- slightly smaller fragsizes work better because of slop -->
      <int name="hl.fragsize">400</int>
      <!-- allow 50% slop on fragment sizes -->
      <float name="hl.regex.slop">1.0</float>
      <!-- a basic sentence pattern -->
      <str name="hl.regex.pattern">[-\w ,/\n\"']{40,400}</str>
    </lst>
   </fragmenter>

我将其设置为高以查看结果。我清理了我的 nutch 和 Solr 并将它们重建为香草。结果仍然没有变化。

maxmmize 的图片

我关闭了 solrconfig.xml 中的突出显示(在我的 lib 和我的模块文件夹中)并重新运行所有内容,我仍然得到突出显示,所以这证明 Drupal 正在这样做。现在我只需要找出在哪里以及如何。

<!-- example highlighter config, enable per-query with hl=true -->
     <str name="hl">false</str>

顺便说一句,不应该关闭它来阻止我们的 mod 表单运行突出显示吗?

maxmmize 的图片

发现问题:

由于某种原因,solrconfig.xml 没有覆盖 apachesolr_search.module。(权限?)我将 hl.fragsize 的参数中的 NULL 替换为 400 和 wham,完成了。可能的错误?

/**
 * Add highlighting settings to the search params.
 *
 * These settings are set in solrconfig.xml.
 * See the defaults there.
 * If you wish to override them, you can via settings.php
 */
function apachesolr_search_highlighting_params($query) {
  $params['hl'] = variable_get('apachesolr_hl_active', NULL);
  $params['hl.fragsize']= variable_get('apachesolr_hl_textsnippetlength', 400);
  $params['hl.simple.pre'] = variable_get('apachesolr_hl_pretag', NULL);
  $params['hl.simple.post'] = variable_get('apachesolr_hl_posttag', NULL);
  $params['hl.snippets'] = variable_get('apachesolr_hl_numsnippets', NULL);
  $params['hl.fl'] = variable_get('apachesolr_hl_fieldtohightlight', NULL);
  return $params;
}
maxmmize 的图片

地位:积极的» 需要审查
杰布劳尔的照片

如果变量为空,它们似乎被忽略。例如在 settings.php 设置中:

'apachesolr_hl_pretag' => NULL,
'apachesolr_hl_posttag' => NULL,

仍然提供用标签突出显示的单词。但是将“--”之类的东西作为值会导致它呈现--用于 pre 或 post 标记。只要不是 NULL 或 '',任何值似乎都可以工作。

jpmckinney 的照片

标题:调整突出显示预告片长度» 添加 UI 以突出显示配置变量
版本:6.x-2.x-开发» 7.x-1.x-开发
类别:任务“ 特征
地位:需要审查“ 积极的

我们需要一个补丁才能使问题成为“需要审查”。

您可以在 settings.php(或使用 strongarm)中设置这些变量。我们可能应该在 UI 中公开它们。

首先在 HEAD 中添加功能。

pwolanin 的图片

地位:积极的» 关闭(不会修复)

我认为我们不应该为此向基本模块添加 UI。

OP似乎正在讨论其他一些问题-


来自  https://www.drupal.org/node/970928








普通分类: