From: <lph...@us...> - 2014-08-20 17:08:50
|
Revision: 52373 http://sourceforge.net/p/tikiwiki/code/52373 Author: lphuberdeau Date: 2014-08-20 17:08:42 +0000 (Wed, 20 Aug 2014) Log Message: ----------- [MOD] Apply federated results to the more like this module when enabled Modified Paths: -------------- trunk/lib/core/Search/Elastic/Index.php trunk/lib/core/Search/Elastic/QueryBuilder.php trunk/lib/core/Search/Expr/MoreLikeThis.php trunk/lib/core/Search/Federated/IndexInterface.php trunk/lib/core/Search/Federated/ManifoldCfIndex.php trunk/lib/core/Search/Federated/TikiIndex.php trunk/lib/core/Search/Query.php trunk/lib/search/federatedsearchlib.php trunk/modules/mod-func-search_morelikethis.php trunk/templates/modules/mod-search_morelikethis.tpl Modified: trunk/lib/core/Search/Elastic/Index.php =================================================================== --- trunk/lib/core/Search/Elastic/Index.php 2014-08-20 15:41:17 UTC (rev 52372) +++ trunk/lib/core/Search/Elastic/Index.php 2014-08-20 17:08:42 UTC (rev 52373) @@ -255,7 +255,16 @@ $connection = $this->connection; $index = $this->index; return function ($type, $object) use ($connection, $index) { - return (array) $connection->document($index, $type, $object); + static $previous, $content; + + $now = "$index~$type~$object"; + if ($previous === $now) { + return $content; + } + + $previous = $now; + $content = (array) $connection->document($index, $type, $object); + return $content; }; } Modified: trunk/lib/core/Search/Elastic/QueryBuilder.php =================================================================== --- trunk/lib/core/Search/Elastic/QueryBuilder.php 2014-08-20 15:41:17 UTC (rev 52372) +++ trunk/lib/core/Search/Elastic/QueryBuilder.php 2014-08-20 17:08:42 UTC (rev 52373) @@ -138,7 +138,7 @@ $content = $this->getDocumentContent($type, $object); return array( 'more_like_this' => array( - 'fields' => array('contents'), + 'fields' => array($node->getField()), 'like_text' => $content, 'boost' => $node->getWeight(), ), Modified: trunk/lib/core/Search/Expr/MoreLikeThis.php =================================================================== --- trunk/lib/core/Search/Expr/MoreLikeThis.php 2014-08-20 15:41:17 UTC (rev 52372) +++ trunk/lib/core/Search/Expr/MoreLikeThis.php 2014-08-20 17:08:42 UTC (rev 52373) @@ -26,8 +26,9 @@ return 'plaintext'; } - function setField($field = 'global') + function setField($field = 'contents') { + $this->field = $field; } function setWeight($weight) Modified: trunk/lib/core/Search/Federated/IndexInterface.php =================================================================== --- trunk/lib/core/Search/Federated/IndexInterface.php 2014-08-20 15:41:17 UTC (rev 52372) +++ trunk/lib/core/Search/Federated/IndexInterface.php 2014-08-20 17:08:42 UTC (rev 52373) @@ -12,5 +12,7 @@ function getTransformations(); function applyContentConditions(\Search_Query $query, $content); + + function applySimilarConditions(\Search_Query $query, $type, $object); } Modified: trunk/lib/core/Search/Federated/ManifoldCfIndex.php =================================================================== --- trunk/lib/core/Search/Federated/ManifoldCfIndex.php 2014-08-20 15:41:17 UTC (rev 52372) +++ trunk/lib/core/Search/Federated/ManifoldCfIndex.php 2014-08-20 17:08:42 UTC (rev 52373) @@ -42,6 +42,11 @@ $query->filterContent($content, ['file']); } + function applySimilarConditions(\Search_Query $query, $type, $object) + { + $query->filterSimilar($type, $object, 'file'); + } + function getType() { return $this->type; Modified: trunk/lib/core/Search/Federated/TikiIndex.php =================================================================== --- trunk/lib/core/Search/Federated/TikiIndex.php 2014-08-20 15:41:17 UTC (rev 52372) +++ trunk/lib/core/Search/Federated/TikiIndex.php 2014-08-20 17:08:42 UTC (rev 52373) @@ -30,6 +30,18 @@ $query->filterContent('y', 'searchable'); $query->filterContent($content, ['title', 'contents']); + $this->applyRaw($query); + } + + function applySimilarConditions(\Search_Query $query, $type, $object) + { + $query->filterSimilar($type, $object); + + $this->applyRaw($query); + } + + private function applyRaw($query) + { $unified = \TikiLib::lib('unifiedsearch'); $unified->initQueryBase($query, false); Modified: trunk/lib/core/Search/Query.php =================================================================== --- trunk/lib/core/Search/Query.php 2014-08-20 15:41:17 UTC (rev 52372) +++ trunk/lib/core/Search/Query.php 2014-08-20 17:08:42 UTC (rev 52373) @@ -171,23 +171,23 @@ $this->addPart($query, 'multivalue', 'relations'); } - function filterSimilar($type, $object) + function filterSimilar($type, $object, $field = 'contents') { - $this->expr->addPart( - new Search_Expr_And( - array( - new Search_Expr_Not( - new Search_Expr_And( - array( - new Search_Expr_Token($type, 'identifier', 'object_type'), - new Search_Expr_Token($object, 'identifier', 'object_id'), - ) + $part = new Search_Expr_And( + array( + new Search_Expr_Not( + new Search_Expr_And( + array( + new Search_Expr_Token($type, 'identifier', 'object_type'), + new Search_Expr_Token($object, 'identifier', 'object_id'), ) - ), - new Search_Expr_MoreLikeThis($type, $object), - ) + ) + ), + new Search_Expr_MoreLikeThis($type, $object), ) ); + $part->setField($field); + $this->expr->addPart($part); } private function addPart($query, $type, $field) Modified: trunk/lib/search/federatedsearchlib.php =================================================================== --- trunk/lib/search/federatedsearchlib.php 2014-08-20 15:41:17 UTC (rev 52372) +++ trunk/lib/search/federatedsearchlib.php 2014-08-20 17:08:42 UTC (rev 52373) @@ -38,6 +38,16 @@ } } + function augmentSimilarQuery(Search_Query $query, $type, $object) + { + $indices = $this->getIndices(); + + foreach ($indices as $indexName => $index) { + $sub = $this->addForIndex($query, $indexName, $index); + $index->applySimilarConditions($sub, $type, $object); + } + } + private function load() { if (! $this->loaded) { Modified: trunk/modules/mod-func-search_morelikethis.php =================================================================== --- trunk/modules/mod-func-search_morelikethis.php 2014-08-20 15:41:17 UTC (rev 52372) +++ trunk/modules/mod-func-search_morelikethis.php 2014-08-20 17:08:42 UTC (rev 52373) @@ -44,8 +44,10 @@ */ function module_search_morelikethis($mod_reference, $module_params) { - global $smarty; + global $prefs; + $smarty = TikiLib::lib('smarty'); + $textfilters = array(); $typefilters = array(); if (!empty($module_params['textfilters'])) { @@ -77,6 +79,11 @@ $query->filterType($typefilters); } + if ($prefs['federated_enabled'] == 'y') { + $fed = TikiLib::lib('federatedsearch'); + $fed->augmentSimilarQuery($query, $object['type'], $object['object']); + } + try { $morelikethis = $query->search($unifiedsearchlib->getIndex()); Modified: trunk/templates/modules/mod-search_morelikethis.tpl =================================================================== --- trunk/templates/modules/mod-search_morelikethis.tpl 2014-08-20 15:41:17 UTC (rev 52372) +++ trunk/templates/modules/mod-search_morelikethis.tpl 2014-08-20 17:08:42 UTC (rev 52373) @@ -2,22 +2,18 @@ {if isset($modMoreLikeThis) && count($modMoreLikeThis) gt 0} {tikimodule error=$module_params.error title=$tpl_module_title name="search_morelikethis" flip=$module_params.flip decorations=$module_params.decorations nobox=$module_params.nobox notitle=$module_params.notitle} - {if ($nonums eq 'y')} - <ul> + {$tag = ($nonums eq 'y') ? 'ul' : 'ol'} + <{$tag}> {foreach item=row from=$modMoreLikeThis} {if $row.object_id eq $simobject.object and $row.object_type eq $row.object_type}{else} - <li>{object_link type=$row.object_type id=$row.object_id}</li> + <li> + {object_link type=$row.object_type id=$row.object_id title=$row.title} + {if $row._external} + <span class="label label-info">{tr}External{/tr}</span> + {/if} + </li> {/if} {/foreach} - </ul> - {else} - <ol> - {foreach item=row from=$modMoreLikeThis} - {if $row.object_id eq $simobject.object and $row.object_type eq $row.object_type}{else} - <li>{object_link type=$row.object_type id=$row.object_id}</li> - {/if} - {/foreach} - </ol> - {/if} + </{$tag}> {/tikimodule} {/if} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |