lucenesearchservice.java
来自「jetspeed源代码」· Java 代码 · 共 687 行 · 第 1/2 页
JAVA
687 行
}
catch(Exception e)
{
logger.error("Error trying to add fields to parsed object.", e);
}
}
private void addFieldsToMap(Document doc, Set fieldNames, Map fields)
{
Iterator fieldIter = fieldNames.iterator();
while(fieldIter.hasNext())
{
String fieldName = (String)fieldIter.next();
Field[] docFields = doc.getFields(fieldName);
if(fields != null)
{
for(int i=0; i<docFields.length; i++)
{
Field field = docFields[i];
if(field != null)
{
String value = field.stringValue();
fields.put(fieldName, value);
}
}
}
}
}
/**
*
* @return
*/
public String[] getSearchSets()
{
return null;
}
/**
*
* @see org.apache.jetspeed.services.search.SearchService#add(java.lang.Object)
* @param o
* @return
*/
public boolean add(Object o)
{
Collection c = new ArrayList(1);
c.add(o);
return add(c);
}
/**
*
* @see org.apache.jetspeed.services.search.SearchService#add(java.lang.Collection)
* @param c
* @return
*/
public boolean add(Collection c)
{
boolean result = false;
IndexWriter indexWriter;
try
{
indexWriter = new IndexWriter(rootDir, new StandardAnalyzer(), false);
}
catch (IOException e)
{
logger.error("Error while creating index writer. Skipping add...", e);
return result;
}
Iterator it = c.iterator();
while (it.hasNext())
{
Object o = it.next();
// Look up appropriate handler
ObjectHandler handler = null;
try
{
handler = HandlerFactory.getHandler(o);
}
catch (Exception e)
{
logger.error("Failed to create hanlder for object " + o.getClass().getName());
continue;
}
// Parse the object
ParsedObject parsedObject = handler.parseObject(o);
// Create document
Document doc = new Document();
// Populate document from the parsed object
if (parsedObject.getKey() != null)
{
doc.add(Field.Keyword(ParsedObject.FIELDNAME_KEY, parsedObject.getKey()));
}
if (parsedObject.getType() != null)
{
doc.add(Field.Text(ParsedObject.FIELDNAME_TYPE, parsedObject.getType()));
}
if (parsedObject.getTitle() != null)
{
doc.add(Field.Text(ParsedObject.FIELDNAME_TITLE, parsedObject.getTitle()));
}
if (parsedObject.getDescription() != null)
{
doc.add(Field.Text(ParsedObject.FIELDNAME_DESCRIPTION, parsedObject.getDescription()));
}
if (parsedObject.getContent() != null)
{
doc.add(Field.Text(ParsedObject.FIELDNAME_CONTENT, parsedObject.getContent()));
}
if (parsedObject.getLanguage() != null)
{
doc.add(Field.Text(ParsedObject.FIELDNAME_LANGUAGE, parsedObject.getLanguage()));
}
if (parsedObject.getURL() != null)
{
doc.add(Field.Text(ParsedObject.FIELDNAME_URL, parsedObject.getURL().toString()));
}
if(parsedObject.getClassName() != null)
{
doc.add(Field.Text(ParsedObject.FIELDNAME_CLASSNAME, parsedObject.getClassName()));
}
MultiMap multiKeywords = parsedObject.getMultiKeywords();
addFieldsToDocument(doc, multiKeywords, KEYWORD);
MultiMap multiFields = parsedObject.getMultiFields();
addFieldsToDocument(doc, multiFields, TEXT);
Map fields = parsedObject.getFields();
addFieldsToDocument(doc, fields, TEXT);
// Add the document to search index
try
{
indexWriter.addDocument(doc);
}
catch (IOException e)
{
logger.error("Error adding document to index.", e);
}
logger.debug("Index Document Count = " + indexWriter.docCount());
logger.info("Added '" + parsedObject.getTitle() + "' to index");
result = true;
}
try
{
indexWriter.optimize();
}
catch (IOException e)
{
logger.error("Error while trying to optimize index.");
}
finally
{
try
{
indexWriter.close();
}
catch (IOException e)
{
logger.error("Error while closing index writer.", e);
}
}
return result;
}
private void addFieldsToDocument(Document doc, Map fields, int type)
{
if(fields != null)
{
Iterator keyIter = fields.keySet().iterator();
while(keyIter.hasNext())
{
Object key = keyIter.next();
if(key != null)
{
Object values = fields.get(key);
if(values != null)
{
if(values instanceof Collection)
{
Iterator valueIter = ((Collection)values).iterator();
while(valueIter.hasNext())
{
Object value = valueIter.next();
if(value != null)
{
if(type == TEXT)
{
doc.add(Field.Text(key.toString(), value.toString()));
}
else
{
doc.add(Field.Keyword(key.toString(), value.toString()));
}
}
}
}
else
{
if(type == TEXT)
{
doc.add(Field.Text(key.toString(), values.toString()));
}
else
{
doc.add(Field.Keyword(key.toString(), values.toString()));
}
}
}
}
}
}
}
/**
*
* @see org.apache.jetspeed.services.search.SearchService#remove(java.lang.Object)
* @param o
* @return
*/
public boolean remove(Object o)
{
Collection c = new ArrayList(1);
c.add(o);
return remove(c);
}
/**
*
* @see org.apache.jetspeed.services.search.SearchService#remove(java.lang.Collection)
* @param c
* @return
*/
public boolean remove(Collection c)
{
boolean result = false;
try
{
IndexReader indexReader = IndexReader.open(this.rootDir);
Iterator it = c.iterator();
while (it.hasNext())
{
Object o = it.next();
// Look up appropriate handler
ObjectHandler handler = HandlerFactory.getHandler(o);
// Parse the object
ParsedObject parsedObject = handler.parseObject(o);
// Create term
Term term = null;
if (parsedObject.getKey() != null)
{
term = new Term(ParsedObject.FIELDNAME_KEY, parsedObject.getKey());
// Remove the document from search index
int rc = indexReader.delete(term);
logger.info("Attempted to delete '" + term.toString() + "' from index, documents deleted = " + rc);
//System.out.println("Attempted to delete '" + term.toString() + "' from index, documents deleted = " + rc);
result = rc > 0;
}
}
indexReader.close();
IndexWriter indexWriter = new IndexWriter(rootDir, new StandardAnalyzer(), false);
indexWriter.optimize();
indexWriter.close();
}
catch (Exception e)
{
logger.error("Exception", e);
result = false;
}
return result;
}
/**
*
* @see org.apache.jetspeed.services.search.SearchService#update(java.lang.Object)
* @param o
* @return
*/
public boolean update(Object o)
{
Collection c = new ArrayList(1);
c.add(o);
return update(c);
}
/**
* Updates an index entry. For now, it's a remove and add.
*
* @param c
* @return
* @see org.apache.jetspeed.services.search.SearchService#update(java.lang.Collection)
*/
public boolean update(Collection c)
{
boolean result = false;
try
{
// Delete entries from index
remove(c);
result = true;
}
catch (Throwable e)
{
logger.error("Exception", e);
}
try
{
// Add entries to index
add(c);
result = true;
}
catch (Throwable e)
{
logger.error("Exception", e);
}
return false;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?