09-11-2008 04:19 AM
String queryOut="+ID:\""+ nodeRef.toString()+"\" ";
query = query + " TEXT:\"+"+chktg.trim()+"\" ";
inconvénient je recherche sur tous les nœuds du repository.
public static boolean searchInNodeRef(NodeRef nodeRef, String tags, NodeService nodeService, SearchService searchService ) {
boolean returned=false;
ContentData contentData = (ContentData) nodeService.getProperty(nodeRef,ContentModel.PROP_CONTENT);
Locale locale = contentData.getLocale();
SearchParameters searchParameters= new SearchParameters();
searchParameters.setLanguage(SearchService.LANGUAGE_LUCENE);
searchParameters.addStore(nodeRef.getStoreRef());
if (locale != null ) {
searchParameters.addLocale(locale);
}
String queryOut="+ID:\""+ nodeRef.toString()+"\" ";
String query="";
if (tags == null || tags.length() <= 0) {
return returned;
}
String tagsAnd = "";
String tagsOr = "";
StringTokenizer tokenizer = new StringTokenizer(tags, ",");
while (tokenizer.hasMoreTokens()) {
String chktg=tokenizer.nextToken();
if ( chktg.substring(0, 1).compareTo("+") == 0 ) {
tagsAnd = tagsAnd + chktg.substring(1, chktg.length()) + " ";
} else {
tagsOr = tagsOr + chktg + " ";
}
}
if ( tagsAnd.length() > 0 ) {
tokenizer = new StringTokenizer(tagsAnd, " ");
while (tokenizer.hasMoreTokens()) {
String chktg=tokenizer.nextToken();
query = query + " TEXT:\"+"+chktg.trim()+"\" ";
}
}
if ( tagsOr.length() > 0 ) {
query = query + " +( ";
tokenizer = new StringTokenizer(tagsOr, " ");
while (tokenizer.hasMoreTokens()) {
String chktg=tokenizer.nextToken();
query = query + " TEXT:\""+chktg.trim()+"\" ";
}
query = query + " )";
}
queryOut= queryOut + " " + query.trim();
searchParameters.setQuery( queryOut.trim() );
// Transform the results into a node list
ResultSet results = null;
try {
results = searchService.query(searchParameters);
for (ResultSetRow row : results) {
if (nodeRef.getId().compareTo(row.getNodeRef().getId()) == 0) {
returned = true;
}
}
}
finally {
if (results != null) {
results.close();
}
}
return returned;
}
09-11-2008 12:31 PM
09-12-2008 05:21 AM
09-12-2008 08:08 AM
@sys\:node-uuid:(fef01cce-7dbe-11dd-b66d-db7edbe1ff00)
09-12-2008 04:36 PM
Tu as essayé de tester ta requête combinant ID et TEXT directement dans le NodeBrowser ?oui mais je me suis apperçu que le document qui arrive dans un workflow n'est pas encore indexé … donc pas de recherche
Si ID ne marche pas comme attendu, tu peux toujours utiliser sys:node-uuid à la place :déja testé , même effet …@sys\:node-uuid:(fef01cce-7dbe-11dd-b66d-db7edbe1ff00)
09-15-2008 06:35 AM
oui mais je me suis apperçu que le document qui arrive dans un workflow n'est pas encore indexé … donc pas de recherche
10-04-2008 04:19 AM
import java.io.StringReader;
import java.util.StringTokenizer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.lucene.index.IndexReader;
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
import org.apache.lucene.search.Searcher;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.search.IndexSearcher;
import org.apache.lucene.search.Query;
import org.apache.lucene.search.ScoreDoc;
import org.apache.lucene.search.TopDocCollector;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.RAMDirectory;
import org.apache.lucene.queryParser.QueryParser;
public class LuceneSearcher {
private String ID;
private Directory indexDirectory;
/**
*
* @param workingNode
* @throws Exception
*/
public LuceneSearcher(NodeRef workingNode ,ReaderString readerText ) throws Exception {
this.indexDirectory = new RAMDirectory();
IndexWriter writer = new IndexWriter(this.indexDirectory, getAnalyzer(), true);
Document doc = new Document();
Field idField = new Field("ID", workingNode.getId());
doc.add(idField);
this.ID=workingNode.getId();
Field textField = new Field("TEXT", readerText);
doc.add(textField);
writer.addDocument(doc);
writer.close();
}
protected Analyzer getAnalyzer() {
return new StandardAnalyzer();
}
public boolean searchInDocument(String values ) throws Exception {
IndexReader reader = IndexReader.open(this.indexDirectory);
TopDocCollector collector = new TopDocCollector(100);
Searcher searcher = new IndexSearcher(reader);
Analyzer analyzer = getAnalyzer();
String field = "ID";
QueryParser parser = new QueryParser(field, analyzer);
String queryValue="ID:\""+this.ID+"\";
queryValue=queryValue+" AND ";
queryValue=queryValue+" ( ";
queryValue=queryValue+" TEXT:"+values;
queryValue=queryValue+" ) ";
Query query = parser.parse(queryValue);
searcher.search(query, collector);
ScoreDoc[] hits = collector.topDocs().scoreDocs;
searcher.close();
if ( hits.length > 0 )
return true;
return false;
}
}
Tags
Find what you came for
We want to make your experience in Hyland Connect as valuable as possible, so we put together some helpful links.