prepare for a language navigator

works fine to restrict language for local solrSearches.
More work needs to be done to make rwi/remote searches respect the modifier.language restriction.
pull/1/head
reger 11 years ago
parent cf553e5045
commit f307d65dcf

@ -3,17 +3,17 @@
<head>
<title>YaCy '#[clientname]#': Search Page</title>
#%env/templates/metas.template%#
<link rel="stylesheet" type="text/css" media="screen" href="/env/highslide.css" />
<script type="text/javascript" src="/js/yacysearch.js"></script>
<script type="text/javascript" src="/js/highslide/highslide.js"></script>
<link rel="stylesheet" type="text/css" media="screen" href="env/highslide.css" />
<script type="text/javascript" src="js/yacysearch.js"></script>
<script type="text/javascript" src="js/highslide/highslide.js"></script>
<script type="text/javascript">hs.outlineType = 'rounded-white';</script>
<script src="/yacy/ui/js/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="/yacy/ui/js/jquery-ui-1.7.2.min.js" type="text/javascript"></script>
<script src="/yacy/ui/js/jquery.tagcloud.js" type="text/javascript"></script>
<script src="/yacy/ui/js/jquery.tinysort.min.js" type="text/javascript"></script>
<link media="screen" type="text/css" href="/yacy/ui/css/themes/start/ui.base.css" rel="stylesheet" />
<link media="screen" type="text/css" href="/yacy/ui/css/themes/start/ui.theme.css" rel="stylesheet" />
<link media="screen" type="text/css" href="/yacy/ui/css/autocomplete.css" rel="stylesheet" />
<script src="yacy/ui/js/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="yacy/ui/js/jquery-ui-1.7.2.min.js" type="text/javascript"></script>
<script src="yacy/ui/js/jquery.tagcloud.js" type="text/javascript"></script>
<script src="yacy/ui/js/jquery.tinysort.min.js" type="text/javascript"></script>
<link media="screen" type="text/css" href="yacy/ui/css/themes/start/ui.base.css" rel="stylesheet" />
<link media="screen" type="text/css" href="yacy/ui/css/themes/start/ui.theme.css" rel="stylesheet" />
<link media="screen" type="text/css" href="yacy/ui/css/autocomplete.css" rel="stylesheet" />
</head>
<body id="ConfigSearchPage" >
@ -32,8 +32,8 @@ $(function() {
$("#sidebarDomains").accordion({});
$("#sidebarProtocols").accordion({});
$("#sidebarFiletypes").accordion({});
$("#sidebarLanguages").accordion({});
$("#sidebarAuthors").accordion({});
$("#sidebarLanguages").accordion({});
$("#sidebarNameSpace").accordion({});
$("#sidebarTopics").tagcloud({type:"sphere",power:.25,seed:0,sizemin:10,sizemax:20,height:80,colormin:"682",colormax:"20C"}).find("li").tsort();
$("#sidebarAbout").accordion({});
@ -58,11 +58,11 @@ $(function() {
<td valign="top"><input type="checkbox" name="publicTopmenu" value="true" #(publicTopmenu)#::checked="checked" #(/publicTopmenu)# /></td>
<td><div class="SubMenu">
<ul class="SubMenu">
<li style="width: 15%;"><a href="/Status.html" target="LayouTest" class="MenuItemLink">Administration</a></li>
<li style="width: 15%;"><a href="/index.html" target="LayouTest" class="MenuItemLink">Web Search</a></li>
<li style="width: 15%;"><a href="/yacyinteractive.html" target="LayouTest" class="MenuItemLink">File Search</a></li>
<li style="width: 15%;"><a href="/HostBrowser.html?hosts=" target="LayouTest" class="MenuItemLink">HostBrowser</a></li>
<li style="width: 15%;"><a href="/ViewProfile.html?hash=localhash" target="LayouTest" class="MenuItemLink">About Us</a></li>
<li style="width: 15%;"><a href="Status.html" target="LayouTest" class="MenuItemLink">Administration</a></li>
<li style="width: 15%;"><a href="index.html" target="LayouTest" class="MenuItemLink">Web Search</a></li>
<li style="width: 15%;"><a href="yacyinteractive.html" target="LayouTest" class="MenuItemLink">File Search</a></li>
<li style="width: 15%;"><a href="HostBrowser.html?hosts=" target="LayouTest" class="MenuItemLink">HostBrowser</a></li>
<li style="width: 15%;"><a href="ViewProfile.html?hash=localhash" target="LayouTest" class="MenuItemLink">About Us</a></li>
<li style="width: 15%;"><a href="http://www.yacy-websearch.net/wiki/" target="LayouTest" class="MenuItemLink">Help / YaCy Wiki</a></li>
</ul>
</div></td>
@ -143,6 +143,12 @@ $(function() {
<h3 style="padding-left: 25px;">Wiki Name Space Navigator</h3>
</div></td>
</tr>
<tr>
<td><input type="checkbox" name="search.navigation.language" value="true" #(search.navigation.language)#::checked="checked" #(/search.navigation.language)# /></td>
<td><div id="sidebarLanguages" style="float: right; margin-top: 0px; width: 230px;">
<h3 style="padding-left: 25px;">Language Navigator</h3>
</div></td>
</tr>
<tr>
<td><input type="checkbox" name="search.navigation.authors" value="true" #(search.navigation.authors)#::checked="checked" #(/search.navigation.authors)# /></td>
<td><div id="sidebarAuthors" style="float: right; margin-top: 0px; width: 230px;">
@ -185,9 +191,9 @@ $(function() {
<td width="15px"></td>
<td>#[content_showDate_date]#</td>
<td>&nbsp;|&nbsp;42 kbyte</td>
<td>&nbsp;|&nbsp;<a href="/solr/select?q=*:*&defType=edismax&start=0&rows=3&core=collection1&wt=html" target="LayouTest" onclick="return hs.htmlExpand(this, { objectType: 'ajax'} )">Metadata</a></td>
<td>&nbsp;|&nbsp;<a href="solr/select?q=*:*&defType=edismax&start=0&rows=3&core=collection1&wt=html" target="LayouTest" onclick="return hs.htmlExpand(this, { objectType: 'ajax'} )">Metadata</a></td>
<td>&nbsp;|&nbsp;<a href="ViewFile.html" target="LayouTest">Parser</a></td>
<td>&nbsp;|&nbsp;<a href="/api/citation.html?url=yacy.net" target="LayouTest">Citation</a></td>
<td>&nbsp;|&nbsp;<a href="api/citation.html?url=yacy.net" target="LayouTest">Citation</a></td>
<td>&nbsp;|&nbsp;<a href="yacysearch.html" target="LayouTest">Pictures</a></td>
<td>&nbsp;|&nbsp;<a href="CacheResource_p.html" target="LayouTest">Cache</a></td>
<td>&nbsp;|&nbsp;<a href="proxy.html" target="LayouTest">Augmented Browsing</a></td>
@ -236,6 +242,7 @@ $(function() { $("#sidebarProtocols").accordion('activate', false); });
$(function() { $("#sidebarFiletypes").accordion('activate', false); });
$(function() { $("#sidebarDomains").accordion('activate', false); });
$(function() { $("#sidebarNameSpace").accordion('activate', false); });
$(function() { $("#sidebarLanguages").accordion('activate', false); });
$(function() { $("#sidebarAuthors").accordion('activate', false); });
$(function() { $("#vocabulary").accordion('activate', false); });
$(function() { $("#sidebarAbout").accordion('activate', false); });

@ -84,6 +84,7 @@ public class ConfigSearchPage_p {
if (post.getBoolean("search.navigation.filetype")) nav += "filetype,";
if (post.getBoolean("search.navigation.protocol")) nav += "protocol,";
if (post.getBoolean("search.navigation.hosts")) nav += "hosts,";
if (post.getBoolean("search.navigation.language")) nav += "language,";
if (post.getBoolean("search.navigation.authors")) nav += "authors,";
if (post.getBoolean("search.navigation.namespace")) nav += "namespace,";
if (post.getBoolean("search.navigation.topics")) nav += "topics,";
@ -162,6 +163,7 @@ public class ConfigSearchPage_p {
prop.put("search.navigation.filetype", sb.getConfig("search.navigation", "").indexOf("filetype",0) >= 0 ? 1 : 0);
prop.put("search.navigation.protocol", sb.getConfig("search.navigation", "").indexOf("protocol",0) >= 0 ? 1 : 0);
prop.put("search.navigation.hosts", sb.getConfig("search.navigation", "").indexOf("hosts",0) >= 0 ? 1 : 0);
prop.put("search.navigation.language", sb.getConfig("search.navigation", "").indexOf("language",0) >= 0 ? 1 : 0);
prop.put("search.navigation.authors", sb.getConfig("search.navigation", "").indexOf("authors",0) >= 0 ? 1 : 0);
prop.put("search.navigation.namespace", sb.getConfig("search.navigation", "").indexOf("namespace",0) >= 0 ? 1 : 0);
prop.put("search.navigation.topics", sb.getConfig("search.navigation", "").indexOf("topics",0) >= 0 ? 1 : 0);

@ -6,19 +6,19 @@
#%env/templates/interactionheader.template%#
<link rel="alternate" type="application/rss+xml" title="Search for #[former]#" href="yacysearch.rss?query=#[former]#" />
<link rel="search" type="application/opensearchdescription+xml" title="YaCy Search on '#[clientname]#'" href="http://#[thisaddress]#/opensearchdescription.xml" />
<link rel="stylesheet" type="text/css" media="screen" href="/env/highslide.css" />
<script type="text/javascript" src="/js/ajax.js"></script>
<script type="text/javascript" src="/js/xml.js"></script>
<script type="text/javascript" src="/js/yacysearch.js"></script>
<script type="text/javascript" src="/js/highslide/highslide.js"></script>
<link rel="stylesheet" type="text/css" media="screen" href="env/highslide.css" />
<script type="text/javascript" src="js/ajax.js"></script>
<script type="text/javascript" src="js/xml.js"></script>
<script type="text/javascript" src="js/yacysearch.js"></script>
<script type="text/javascript" src="js/highslide/highslide.js"></script>
<script type="text/javascript">hs.outlineType = 'rounded-white';</script>
<script src="/yacy/ui/js/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="/yacy/ui/js/jquery-ui-1.7.2.min.js" type="text/javascript"></script>
<script src="/yacy/ui/js/jquery.tagcloud.js" type="text/javascript"></script>
<script src="/yacy/ui/js/jquery.tinysort.min.js" type="text/javascript"></script>
<link media="screen" type="text/css" href="/yacy/ui/css/themes/start/ui.base.css" rel="stylesheet" />
<link media="screen" type="text/css" href="/yacy/ui/css/themes/start/ui.theme.css" rel="stylesheet" />
<link media="screen" type="text/css" href="/yacy/ui/css/autocomplete.css" rel="stylesheet" />
<script src="yacy/ui/js/jquery-1.3.2.min.js" type="text/javascript"></script>
<script src="yacy/ui/js/jquery-ui-1.7.2.min.js" type="text/javascript"></script>
<script src="yacy/ui/js/jquery.tagcloud.js" type="text/javascript"></script>
<script src="yacy/ui/js/jquery.tinysort.min.js" type="text/javascript"></script>
<link media="screen" type="text/css" href="yacy/ui/css/themes/start/ui.base.css" rel="stylesheet" />
<link media="screen" type="text/css" href="yacy/ui/css/themes/start/ui.theme.css" rel="stylesheet" />
<link media="screen" type="text/css" href="yacy/ui/css/autocomplete.css" rel="stylesheet" />
<script type="text/javascript">
//<![CDATA[
@ -42,10 +42,10 @@
</script>
</head>
<body id="yacysearch">
<script type="text/javascript" src="/yacy/ui/js/jquery.autocomplete.yacy.js"></script>
<script type="text/javascript" src="yacy/ui/js/jquery.autocomplete.yacy.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#search').autocomplete('/suggest.json', {parse: opensearch, delay: 0, selectFirst: false, scroll: false, max: 30});
$('#search').autocomplete('suggest.json', {parse: opensearch, delay: 0, selectFirst: false, scroll: false, max: 30});
function opensearch(data) {
var parsed = [];
data = eval('({"suggest":' + data + '})');
@ -105,7 +105,8 @@ $(function() {
$("#sidebarDomains").accordion({});
$("#sidebarProtocols").accordion({});
$("#sidebarFiletypes").accordion({});
$("#sidebarAuthors").accordion({});
$("#sidebarLanguages").accordion({});
$("#sidebarAuthors").accordion({});
$("#sidebarNameSpace").accordion({});
$("#sidebarTopics").tagcloud({type:"sphere",power:.25,seed:0,sizemin:10,sizemax:20,height:80,colormin:"682",colormax:"20C"}).find("li").tsort();
$("#sidebarAbout").accordion({});
@ -204,8 +205,8 @@ document.getElementById("search").focus();
<p class="url">
#{loc}#
<div style="margin: 20px; width: 100px; float: left;">
<a href="/osm.png?lon=#[lon]#&amp;lat=#[lat]#&amp;zoom=14" class="thumblink" style="float:left;" onclick="return hs.expand(this)">
<img src="/osm.png?lon=#[lon]#&amp;lat=#[lat]#&amp;zoom=14" width="192" height="192" alt="map #[lon]#, #[lat]#" />
<a href="osm.png?lon=#[lon]#&amp;lat=#[lat]#&amp;zoom=14" class="thumblink" style="float:left;" onclick="return hs.expand(this)">
<img src="osm.png?lon=#[lon]#&amp;lat=#[lat]#&amp;zoom=14" width="192" height="192" alt="map #[lon]#, #[lat]#" />
</a>
<div class="TableCellDark"><a href="http://www.openstreetmap.org/?lat=#[lat]#&amp;lon=#[lon]#&amp;zoom=14">#[name]#</a><br /><a href="http://www.openstreetmap.org/?lat=#[lat]#&amp;lon=#[lon]#&amp;zoom=14">lat=#[lat]#, lon=#[lon]#</a></div> <!-- preview -->
<div class="highslide-caption"><a href="http://www.openstreetmap.org/?lat=#[lat]#&amp;lon=#[lon]#&amp;zoom=14">#[name]#</a><br /><a href="http://www.openstreetmap.org/?lat=#[lat]#&amp;lon=#[lon]#&amp;zoom=14">lat=#[lat]#, lon=#[lon]#</a></div> <!-- zoomed -->

@ -398,17 +398,6 @@ public class yacysearch {
modifier.add("/location");
}
final int lrp = querystring.indexOf("/language/", 0);
String language = "";
if ( lrp >= 0 ) {
if ( querystring.length() >= (lrp + 12) ) {
language = querystring.substring(lrp + 10, lrp + 12);
}
querystring = querystring.replace("/language/" + language, "");
language = language.toLowerCase();
modifier.add("/language/" + language);
}
final int inurlp = querystring.indexOf("inurl:", 0);
if ( inurlp >= 0 ) {
int ftb = querystring.indexOf(' ', inurlp);
@ -501,11 +490,12 @@ public class yacysearch {
// read the language from the language-restrict option 'lr'
// if no one is given, use the user agent or the system language as default
language = (post == null) ? language : post.get("lr", language);
if ( language.startsWith("lang_") ) {
String language = (post == null) ? null : post.get("lr");
if (language != null && language.startsWith("lang_") ) {
language = language.substring(5);
if (modifier.language == null) modifier.language = language;
}
if ( !ISO639.exists(language) ) {
if (language == null || !ISO639.exists(language) ) {
// find out language of the user by reading of the user-agent string
String agent = header.get(HeaderFramework.ACCEPT_LANGUAGE);
if ( agent == null ) {

@ -77,6 +77,23 @@ $(function() { $("#sidebarDomains").accordion('activate', false); });
::#(/activate)#
#(/nav-domains)#
#(nav-languages)#::
<div id="sidebarLanguages" style="float:right; margin-top:5px; width:230px;">
<h3 style="padding-left:25px;">Language Navigator</h3>
<dl class="bplike" style="padding-left:5px;">#{element}#
<dt><input type="checkbox" onchange="window.location.href='#[url]#'"#(on)# checked="checked"::#(/on)#/></dt>
<dd>#[name]# (#[count]#)</dd>
#{/element}#</dl>
</div>
#(activate)#
<script type="text/javascript">
//<![CDATA[
$(function() { $("#sidebarLanguages").accordion('activate', false); });
//]]>
</script>
::#(/activate)#
#(/nav-languages)#
#(nav-namespace)#::
<div id="sidebarNameSpace" style="float:right; margin-top:5px; width:230px;">
<h3 style="padding-left:25px;">Name Space Navigator</h3>

@ -35,6 +35,7 @@ import net.yacy.cora.lod.vocabulary.Tagging;
import net.yacy.cora.protocol.RequestHeader;
import net.yacy.cora.sorting.ScoreMap;
import net.yacy.document.LibraryProvider;
import net.yacy.kelondro.util.ISO639;
import net.yacy.peers.graphics.ProfilingGraph;
import net.yacy.search.EventTracker;
import net.yacy.search.Switchboard;
@ -155,6 +156,50 @@ public class yacysearchtrailer {
}
}
// host navigators
final ScoreMap<String> languageNavigator = theSearch.languageNavigator;
if (languageNavigator == null || languageNavigator.isEmpty()) {
prop.put("nav-languages", 0);
} else {
prop.put("nav-languages", 1);
navigatorIterator = languageNavigator.keys(false);
int i = 0, pos = 0, neg = 0;
String nav;
while (i < 20 && navigatorIterator.hasNext()) {
name = navigatorIterator.next();
count = languageNavigator.get(name);
if (count == 0) {
break;
}
nav = "%2Flanguage%2F" + name;
String queryStringForUrl = theSearch.query.getQueryGoal().getQueryString(true);
if (theSearch.query.modifier.language == null || !theSearch.query.modifier.language.contains(name)) {
pos++;
queryStringForUrl += "+" + nav;
prop.put("nav-languages_element_" + i + "_on", 1);
prop.put(fileType, "nav-languages_element_" + i + "_modifier", nav);
} else {
neg++;
prop.put("nav-languages_element_" + i + "_on", 0);
prop.put(fileType, "nav-languages_element_" + i + "_modifier", "-" + nav);
}
String longname = ISO639.country(name);
prop.put(fileType, "nav-languages_element_" + i + "_name", longname == null ? name : longname);
prop.put(fileType, "nav-languages_element_" + i + "_url", QueryParams.navurl(fileType.name().toLowerCase(), 0, theSearch.query, queryStringForUrl).toString());
prop.put("nav-languages_element_" + i + "_count", count);
prop.put("nav-languages_element_" + i + "_nl", 1);
i++;
}
prop.put("nav-languages_element", i);
prop.put("nav-languages_activate", on(pos, neg, MAXLIMIT_NAV_HIGH) ? 1 : 0);
i--;
prop.put("nav-languages_element_" + i + "_nl", 0);
if (pos == 1 && neg == 0)
{
prop.put("nav-languages", 0); // this navigation is not useful
}
}
// author navigators
if (theSearch.authorNavigator == null || theSearch.authorNavigator.isEmpty()) {
prop.put("nav-authors", 0);

@ -27,6 +27,7 @@ import org.apache.solr.common.params.MultiMapSolrParams;
import net.yacy.cora.document.id.DigestURL;
import net.yacy.cora.util.CommonPattern;
import net.yacy.kelondro.util.ISO639;
import net.yacy.search.schema.CollectionSchema;
import net.yacy.server.serverObjects;
@ -34,13 +35,14 @@ import net.yacy.server.serverObjects;
public class QueryModifier {
private final StringBuilder modifier;
public String sitehost, sitehash, filetype, protocol, author, collection;
public String sitehost, sitehash, filetype, protocol, language, author, collection;
public QueryModifier() {
this.sitehash = null;
this.sitehost = null;
this.filetype = null;
this.protocol = null;
this.language = null;
this.author = null;
this.collection = null;
this.modifier = new StringBuilder(20);
@ -120,6 +122,21 @@ public class QueryModifier {
add("author:" + author);
}
}
// parse language
final int langi = querystring.indexOf("/language/");
if (langi >= 0) {
if (querystring.length() >= (langi + 12)) {
language = querystring.substring(langi + 10, langi + 12);
querystring = querystring.replace("/language/" + language, "");
if (language.length() == 2 && ISO639.exists(language)) { // only 2-digit codes valid
language = language.toLowerCase();
add("/language/" + language);
} else {
language = null;
}
}
}
// check the number of quotes in the string; if there is only one double-quote, add another one. this will prevent error messages in
int p = querystring.indexOf('"');

@ -87,6 +87,7 @@ public final class QueryParams {
defaultfacetfields.put("protocol", CollectionSchema.url_protocol_s);
defaultfacetfields.put("filetype", CollectionSchema.url_file_ext_s);
defaultfacetfields.put("authors", CollectionSchema.author_sxt);
defaultfacetfields.put("language", CollectionSchema.language_s);
//missing: namespace
}
@ -446,6 +447,12 @@ public final class QueryParams {
fq.append(" AND ").append(CollectionSchema.VOCABULARY_PREFIX).append(tag.getVocabularyName()).append(CollectionSchema.VOCABULARY_SUFFIX).append(":\"").append(tag.getObject()).append('\"');
}
}
// add language facet
if (this.modifier.language != null && this.modifier.language.length() > 0 && this.solrSchema.contains((CollectionSchema.language_s))) {
fq.append(" AND ").append(CollectionSchema.language_s.getSolrFieldName()).append(":\"").append(this.modifier.language).append('\"');
}
// add author facets
if (this.modifier.author != null && this.modifier.author.length() > 0 && this.solrSchema.contains(CollectionSchema.author_sxt)) {
fq.append(" AND ").append(CollectionSchema.author_sxt.getSolrFieldName()).append(":\"").append(this.modifier.author).append('\"');

@ -78,6 +78,7 @@ import net.yacy.kelondro.index.RowHandleSet;
import net.yacy.kelondro.rwi.ReferenceContainer;
import net.yacy.kelondro.rwi.TermSearch;
import net.yacy.kelondro.util.Bitfield;
import net.yacy.kelondro.util.ISO639;
import net.yacy.kelondro.util.MemoryControl;
import net.yacy.kelondro.util.SetTools;
import net.yacy.peers.RemoteSearch;
@ -142,6 +143,7 @@ public final class SearchEvent {
public final ScoreMap<String> namespaceNavigator; // a counter for name spaces
public final ScoreMap<String> protocolNavigator; // a counter for protocol types
public final ScoreMap<String> filetypeNavigator; // a counter for file types
public final ScoreMap<String> languageNavigator; // a counter for appearance of languages
public final Map<String, ScoreMap<String>> vocabularyNavigator; // counters for Vocabularies; key is metatag.getVocabularyName()
private final int topicNavigatorCount; // if 0 no topicNavigator, holds expected number of terms for the topicNavigator
private final LoaderDispatcher loader;
@ -223,7 +225,7 @@ public final class SearchEvent {
this.expectedRemoteReferences = new AtomicInteger(0);
this.excludeintext_image = Switchboard.getSwitchboard().getConfigBool("search.excludeintext.image", true);
// prepare configured search navigation
final String navcfg = Switchboard.getSwitchboard().getConfig("search.navigation", "");
final String navcfg = Switchboard.getSwitchboard().getConfig("search.navigation", "")+",language";
this.locationNavigator = navcfg.contains("location") ? new ConcurrentScoreMap<String>() : null;
this.authorNavigator = navcfg.contains("authors") ? new ConcurrentScoreMap<String>() : null;
this.namespaceNavigator = navcfg.contains("namespace") ? new ConcurrentScoreMap<String>() : null;
@ -231,6 +233,7 @@ public final class SearchEvent {
this.protocolNavigator = navcfg.contains("protocol") ? new ConcurrentScoreMap<String>() : null;
this.filetypeNavigator = navcfg.contains("filetype") ? new ConcurrentScoreMap<String>() : null;
this.topicNavigatorCount = navcfg.contains("topics") ? MAX_TOPWORDS : 0;
this.languageNavigator = navcfg.contains("language") ? new ConcurrentScoreMap<String>() : null;
this.vocabularyNavigator = new ConcurrentHashMap<String, ScoreMap<String>>();
this.snippets = new ConcurrentHashMap<String, String>();
this.secondarySearchSuperviser = (this.query.getQueryGoal().getIncludeHashes().size() > 1) ? new SecondarySearchSuperviser(this) : null; // generate abstracts only for combined searches
@ -782,6 +785,21 @@ public final class SearchEvent {
}
}
if (this.languageNavigator != null) {
fcts = facets.get(CollectionSchema.language_s.getSolrFieldName());
if (fcts != null) {
// remove unknown languages
Iterator<String> i = fcts.iterator();
while (i.hasNext()) {
String lang = i.next();
if (!ISO639.exists(lang)) {
i.remove();
}
}
this.languageNavigator.inc(fcts);
}
}
if (this.authorNavigator != null) {
fcts = facets.get(CollectionSchema.author_sxt.getSolrFieldName());
if (fcts != null) this.authorNavigator.inc(fcts);
@ -875,6 +893,12 @@ public final class SearchEvent {
}
}
if (this.query.modifier.language != null) {
if (!this.query.modifier.language.equals(UTF8.String(iEntry.language()))) {
if (log.isFine()) log.fine("dropped Node: language");
continue pollloop;
}
}
// finally extend the double-check and insert result to stack
this.urlhashes.putUnique(iEntry.hash());
rankingtryloop: while (true) {

Loading…
Cancel
Save