⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lucenequeryconstructor.js

📁 lucene2.2.0版本
💻 JS
字号:
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License.  You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */// Lucene Search Query Constructor// Author:  Kelvin Tan  (kelvint at apache.org)// Version: $Id: luceneQueryConstructor.js 545696 2007-06-09 06:09:46Z buschmi $// Change this according to what you use to name the field modifiers in your form.// e.g. with the search field "name", the form element of its modifier // will be "name<modifierSuffix>"var modifierSuffix = 'Modifier';// If not a field-specific search// e.g. with the arbitary form element 'foobar', its modifier will be // <noFieldPrefix>foobarModifier and its form element // will be <noFieldPrefix>foobarvar noFieldPrefix = 'noField-';// Do you wish the query to be displayed as an alert box?var debug = false;// Do you wish the function to submit the form upon query construction?var submitForm = false;// prefix modifier for boolean AND queriesvar AND_MODIFIER = '+';// prefix modifier for boolean NOT queriesvar NOT_MODIFIER = '-';// prefix modifier for boolean OR queriesvar OR_MODIFIER  = ' ';var NO_MODIFIER = 0;// default modifier for termsvar DEFAULT_TERM_MODIFIER = AND_MODIFIER;// default modifier for groups of terms (denoted by parantheses)var DEFAULT_GROUP_MODIFIER = AND_MODIFIER;// used to delimit multiple values from checkboxes and select listsvar VALUE_DELIMITER = ' ';// Constructs the query// @param query Form field to represent the constructed query to be submitted// @param debug Turn on debugging?function doMakeQuery( query, dbg ){  if(typeof(dbg) != "undefined")    debug = dbg;      var frm = query.form;  var formElements = frm.elements;  query.value = '';    // keep track of the fields we've examined  var dict = new Array();    for(var i=0; i<formElements.length; i++)  {    var element = formElements[i];    var elementName = element.name;    if(elementName != "" && !contains(dict, elementName))    {      dict[dict.length] = elementName;            // ensure we get the whole group (of checkboxes, radio, etc), if applicable      var elementValue = getFieldValue(frm[element.name]);      if(elementValue.length > 0)      {        var subElement = frm[elementName + modifierSuffix];        if(typeof(subElement) != "undefined") // found a field/fieldModifier pair        {          var termMod, groupMod;          var modifier = getFieldValue(subElement);          // modifier field is in the form <termModifier>|<groupModifier>          if(modifier.indexOf('|') > -1)          {            var idx = modifier.indexOf('|');            termMod = modifier.substring(0, idx);            if(termMod == '') termMod = DEFAULT_TERM_MODIFIER;            groupMod = modifier.substring(idx + 1);            if(groupMod == '') groupMod = DEFAULT_GROUP_MODIFIER;          }          else          {            termMod = modifier;            if(termMod == '') termMod = DEFAULT_TERM_MODIFIER;            groupMod = DEFAULT_GROUP_MODIFIER;          }          appendTerms(query, termMod, elementValue, elementName, groupMod);        }      }    }  }  if(debug) {alert('Query:' + query.value);}    if(submitForm)  {    frm.submit();  }  else  {    return query;  }}// Constructs a Google-like query (all terms are ANDed)// @param query Form field to represent the constructed query to be submitted// @return Submits the form if submitOnConstruction=true, else returns the query paramfunction doANDTerms(query){  var value = query.value;  query.value = "";  appendTerms(query, AND_MODIFIER,  value);  if(submitForm)  {    frm.submit();  }  else  {    return query;  }}function buildTerms(termModifier, fieldValue){  fieldValue = trim(fieldValue);  var splitStr = fieldValue.split(" ");  fieldValue = '';  var inQuotes = false;  for(var i=0;i<splitStr.length;i++)  {    if(splitStr[i].length > 0)    {      if(!inQuotes)      {        fieldValue = fieldValue + termModifier + splitStr[i] + ' ';      }      else      {         fieldValue = fieldValue + splitStr[i] + ' ';      }            if(splitStr[i].indexOf('"') > -1) inQuotes = !inQuotes    }  }  fieldValue = trim(fieldValue);    return fieldValue;}// Appends terms to a query. // @param query Form field of query// @param termModifier Term modifier// @param value Value to be appended. Tokenized by spaces, //    and termModifier will be applied to each token.// @param fieldName Name of search field. Omit if not a field-specific query.// @param groupModifier Modifier applied to each group of terms.// @return query form fieldfunction appendTerms(query, termModifier, value, fieldName, groupModifier){  if(typeof(groupModifier) == "undefined")    groupModifier = DEFAULT_GROUP_MODIFIER;    value = buildTerms(termModifier, value);    // not a field-specific search  if(fieldName == null || fieldName.indexOf(noFieldPrefix) != -1 || fieldName.length == 0)  {    if(groupModifier == NO_MODIFIER)    {      if(query.value.length == 0)      {        query.value = value;      }      else      {        query.value = query.value + ' ' + value;      }      }    else    {       if(query.value.length == 0)      {        query.value = groupModifier + '(' + value + ')';      }      else      {        query.value = query.value + ' ' + groupModifier + '(' + value + ')';      }      }  }  else  {  	if(groupModifier == NO_MODIFIER) groupModifier = ''    if(query.value.length == 0)    {      query.value = groupModifier + fieldName + ':(' + value + ')';    }    else    {      query.value = query.value + ' ' + groupModifier +fieldName + ':(' + value + ')';    }    }  query.value = trim(query.value)  return query;}// Obtain the value of a form field.// @param field Form field// @return Array of values, or string value depending on field type, //    or empty string if field param is undefined or nullfunction getFieldValue(field){  if(field == null || typeof(field) == "undefined")    return "";  if(typeof(field) != "undefined" && typeof(field[0]) != "undefined" && field[0].type=="checkbox")    return getCheckedValues(field);  if(typeof(field) != "undefined" && typeof(field[0]) != "undefined" && field[0].type=="radio")    return getRadioValue(field);  if(typeof(field) != "undefined" && field.type.match("select*"))     return getSelectedValues(field);  if(typeof(field) != "undefined")    return field.value;}function getRadioValue(radio){  for(var i=0; i<radio.length; i++)  {    if(radio[i].checked)      return radio[i].value;  }}function getCheckedValues(checkbox){  var r = new Array();  for(var i = 0; i < checkbox.length; i++)  {    if(checkbox[i].checked)      r[r.length] = checkbox[i].value;  }  return r.join(VALUE_DELIMITER);}function getSelectedValues (select) {  var r = new Array();  for (var i = 0; i < select.options.length; i++)    if (select.options[i].selected)    {      r[r.length] = select.options[i].value;    }  return r.join(VALUE_DELIMITER);}function quote(value){  return "\"" + trim(value) + "\"";}function contains(array, s){  for(var i=0; i<array.length; i++)  {    if(s == array[i])      return true;  }  return false;}function trim(inputString) {   if (typeof inputString != "string") { return inputString; }      var temp = inputString;      // Replace whitespace with a single space   var pattern = /\s+/ig;   temp = temp.replace(pattern, " ");     // Trim    pattern = /^(\s*)([\w\W]*)(\b\s*$)/;   if (pattern.test(temp)) { temp = temp.replace(pattern, "$2"); }   // run it another time through for words which don't end with a character or a digit   pattern = /^(\s*)([\w\W]*)(\s*$)/;   if (pattern.test(temp)) { temp = temp.replace(pattern, "$2"); }   return temp; // Return the trimmed string back to the user}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -