package com.redpiranha.server.input.search;
/*
* Copyright (C) 2001- 2004 Paul Browne, http://www.firstpartners.net,
*
* released under terms of the GPL license
* http://www.opensource.org/licenses/gpl-license.php
*
* This product includes software developed by the
* Apache Software Foundation (http://www.apache.org)."
*
*/
import org.apache.log4j.Logger;
import java.io.Serializable;
import java.util.Date;
import com.redpiranha.common.*;
/**
* Builds Search Queries
*
* @author BROWNEPA
* @version $Revision: 1.12 $
*/
public class SearchQueryBuilder implements Serializable
{
/**
* Special Characters , as used by Lucene
*/
private static final String LUCENE_SPECIAL_CHARACTERS = ":\"?*~[]^+-()\\&";
/**
* The logger.
*/
private static final Logger log = Logger.getLogger(SearchQueryBuilder.class);
/**
* Handle to instance of self
*/
private static SearchQueryBuilder thisBuilder = new SearchQueryBuilder();
/**
* Constructor - private - use get instance
*/
private SearchQueryBuilder()
{
}
/**
* Get a (Single) instance of this SearchQueryBuilder
*
* @return SearchQueryBuilder
*/
public static SearchQueryBuilder getInstance()
{
return thisBuilder;
}
/**
* Generate a Search Query
*
* @param inQueryString
*
* @return SearchQuery
*/
public SearchQuery buildQuery(String inQueryString)
{
log.debug("buildQuery(" + inQueryString + ")");
//null -empty query check
if ((inQueryString == null)||(inQueryString.equals("")))
{
return new SearchQuery("");
}
//Convert to lower case
inQueryString = inQueryString.toLowerCase();
if (containsLuceneCharacters(inQueryString))
{
return buildPassThroughQuery(inQueryString);
}
//Default to pass through
return buildDefaultQuery(inQueryString);
}
/**
* Advanced Search Builder
* @param fromDate
* @param toDate
* @param searchField1
* @param searchField2
* @param searchField3
* @param searchText1
* @param searchText2
* @param searchText3
* @param andOr2
* @param andOr3
* @param wordsPhrase1
* @param wordsPhrase2
* @param wordsPhrase3
* @return SearchQuery - build from these phrases
*/
public SearchQuery buildQuery(Date fromDate, Date toDate,
String searchField1, String searchField2, String searchField3,
String searchText1, String searchText2, String searchText3,
String andOr2, String andOr3, String wordsPhrase1,
String wordsPhrase2, String wordsPhrase3)
{
//Local Variables
StringBuffer queryContents = new StringBuffer();
//Change nulls to empty strings
if (searchText1==null){searchText1="";}
if (searchText2==null){searchText2="";}
if (searchText3==null){searchText3="";}
//Check that we have some text to search against
if ((searchText1.equals(""))&&(searchText2.equals(""))&&(searchText2.equals(""))){
log.debug("building empty search query");
return new SearchQuery("");
}
//Convert terms to lower case
searchText1=searchText1.toLowerCase();
searchText2=searchText2.toLowerCase();
searchText3=searchText3.toLowerCase();
//Build the Search Query in two parts - 1 the text , word-phrase , should , and or etc
queryContents.append(generateTxtWrdAndOrBodyTitle(null ,searchField1,wordsPhrase1,searchText1));
queryContents.append(generateTxtWrdAndOrBodyTitle(andOr2,searchField2,wordsPhrase2,searchText2));
queryContents.append(generateTxtWrdAndOrBodyTitle(andOr3,searchField3,wordsPhrase3,searchText3));
//Append the Date Search Information - if needed
if((fromDate!=null)&&(toDate!=null)){
queryContents.append(generateDateSection(fromDate,toDate));
}
return new SearchQuery(queryContents.toString());
}
/**
* Generate the Date section of the query
* @param fromDate
* @param toDate
* @return String representing the dates requested , in lucene format
*/
private String generateDateSection(Date fromDate , Date toDate){
//local variables
StringBuffer returnValue = new StringBuffer();
returnValue.append(" AND ("+/**SearchConstants.DOCUMENT_DATE**/"");
returnValue.append(":[");
returnValue.append(fromDate.getTime());
returnValue.append(" TO ");
returnValue.append(toDate.getTime());
returnValue.append("])");
return returnValue.toString();
}
/**
* Build a query , using the defaults fields , wildcards etc
*
* @param inQueryString criteria
*
* @return Simpel Search Query
*/
private SearchQuery buildDefaultQuery(String inQueryString)
{
log.debug("buildDefaultQuery(" + inQueryString + ")");
//Local Variables
StringBuffer queryContents = new StringBuffer();
/* queryContents.append(SearchConstants.DOCUMENT_CONTENTS + ":" + inQueryString + "*");
queryContents.append(" OR ");
queryContents.append(SearchConstants.DOCUMENT_NAME + ":" + inQueryString + "*");
queryContents.append(" OR ");
queryContents.append(SearchConstants.DB_ID + ":" + inQueryString + "*");
queryContents.append(" OR ");
queryContents.append(SearchConstants.DOCUMENT_FILE_NAME + ":" + inQueryString + "*");
queryContents.append(" OR ");
queryContents.append(SearchConstants.DOCUMENT_DATE + ":" + inQueryString + "*");
queryContents.append(" OR ");
queryContents.append(SearchConstants.DOCUMENT_OWNER + ":" + inQueryString + "*");
queryContents.append(" OR ");
queryContents.append(SearchConstants.DOCUMENT_SOURCE + ":" + inQueryString + "*");
*/
return new SearchQuery(queryContents.toString());
}
/**
* Build a pass through query - ie using as much of the original query String as possible
*
* @param inQueryString
*
* @return SearchQuery
*/
private SearchQuery buildPassThroughQuery(String inQueryString)
{
log.debug("buildPassThroughQuery(" + inQueryString + ")");
return new SearchQuery(inQueryString);
}
/**
* Check to see if the querystring contains any lucene special characters
*
* @param inQueryString - to inspect
*
* @return boolean - true if special characters are present
*/
private boolean containsLuceneCharacters(String inQueryString)
{
String thisLetter;
log.debug("containsLuceneCharacters(" + inQueryString + ")");
//Loop through special characters
for (int a = 0; a < LUCENE_SPECIAL_CHARACTERS.length(); a++)
{
thisLetter = LUCENE_SPECIAL_CHARACTERS.substring(a, a + 1);
if (inQueryString.indexOf(thisLetter) > -1)
{
没有合适的资源?快使用搜索试试~ 我知道了~
开源搜索系统 Red-Piranha.7z
共30个文件
java:17个
old:6个
store:6个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 196 浏览量
2022-07-06
13:44:03
上传
评论
收藏 2.26MB 7Z 举报
温馨提示
开源搜索系统 Red-Piranha.7z
资源推荐
资源详情
资源评论
收起资源包目录
开源搜索系统 Red-Piranha.7z (30个子文件)
sample-lucene-txt-blob
com
redpiranha
server
input
index
exception
IndexException.java 1KB
data
FullFileList.java 2KB
FileDocument.java 2KB
IndexAgent.java 6KB
lucene
RpAnalyzer.java 3KB
RpLetterFilter.java 4KB
RpDebugFilter.java 3KB
RpDocumentBuilder.java 8KB
search
SearchItem.java 5KB
SearchAgent.java 3KB
SearchException.java 1KB
SearchQueryBuilder.java 10KB
SearchQuery.java 2KB
output
analysis
tmp
Scheduler.java.old 2KB
HtmlEncoder.java.old 2KB
IndexMessageEncoder.java.old 6KB
URLReader.properties 305B
ProtoFullFileListEntityBean.java.old 2KB
URLReader.java.store 12KB
TmpDataSource.java.store 2KB
PdfReader.java.store.old 5KB
message
IndexBean.java.store 4KB
ItemMessageBean.java.store 11KB
logging
IndexLevel.java.store 2KB
IndexLevelTest.java.store 974B
ProtoBlobEntityBean.java.old 5KB
common
Constants.java 938B
util
exception
ChainedException.java 2KB
data
DataContainer.java 9KB
ClassProperties.java 2KB
共 30 条
- 1
资源评论
qq_38220914
- 粉丝: 605
- 资源: 4312
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 驱动代码驱动代码驱动代码驱动代码
- SVID_20240523_141155_1.mp4
- Code for the complete guide to tkinter tutorial
- 关于百货中心供应链管理系统.zip
- SimpleFolderIcon-master 修改Unity的Project下的文件夹图标
- A python Tkinter widget to display tile based maps
- A pure Python library for adding tables to a Tkinter application
- Vector资源文件.zip
- MobaXterm-Installer
- 88-520告白(520气球).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功