ok heres the deal with my application...
I have got an xml file with about 8000 of these properties...
<property id="80000438">
<name>Dighton Rock</name>
<name>The Rock</name>
<address>Across the Taunton River from Dighton in Dighton Rock
State
Park</address>
<city>Dighton</city>
<state>MA</state>
</property>
I parse this file and convert each into a Property object (to store in a
hashmap)
Meanwhile I have a web front end that has a search box which through ajax
calls a servlet to do a search.
On initialisation the servlet reads the xml file and builds the lucene index
(FSDirectory type).
My idea was to have the servlet hold a hashmap of the objects (keyed on the
id of each property) and have lucene searches return the keys of properties
from its index so I can retrieve the correct objetcs then from the hashmap.
As I said I have a class like the following...
public class PropertyImpl implements Property {
> :
> : String id;
> :
> : List<String> names = new ArrayList<String>();
> :
> : String address = "";
> :
> : String city = "";
> :
> : String street = "";
> :
> : String state = "";
> :
> : String cachedMatchingString;
> :
> : ...
> :
> : ..
> : public String toString() {
> : // save some time
> : if (cachedMatchingString == null) {
> :
> : StringBuffer buf = new StringBuffer();
> :
> : for (String name : names) {
> : buf.append(name + " ");
> : }
> :
> : if (address != null) {
> : buf.append(address + " ");
> : }
> : if (city != null) {
> : buf.append(city + " ");
> : }
> : if (street != null) {
> : buf.append(street + " ");
> : }
> : if (state != null) {
> : buf.append(state);
> : }
> :
> : // get rid of any spaces
> : //cachedMatchingString = buf.toString().replace(" ", "");
> : cachedMatchingString = buf.toString();
> : }
> : return cachedMatchingString;
> : }
For now I am just adding the address field and id to the index:
Field field = new Field("id", prop.getId(), Store.YES,
Index.NO);
doc.add(field);
Field field2 = new Field("address", prop.getAddress().replace("
","").toLowerCase(), Store.NO,
Index.UN_TOKENIZED); //take out spaces
doc.add(field2);
A search example...
ok lets say the search box on the gui might take in a string like:
1. M
or 2. Main St
when theses gets back to the servlet the following code will get executed:
QueryParser parser = new QueryParser("content",
new StandardAnalyzer());
org.apache.lucene.search.Query query =
parser.parse("*"+queryString.toLowerCase()+"**");
where luceneQuery.toString() would be:
1. *m**
or 2. *mainst** //apparently I need to trail with 2 asterisks when
using a leading wildcard
I expect to get a Hits object back where I can get the id(s) of the objects
i need from the hashmap
int hitCount = hits.length();
for(int i=0;i<hitCount;i++)
{
Document doc = (Document)hits.doc(i);
String id = doc.get("id");
Property prop = (Property) propMap.get(id);
results.add(prop);
}
but I get the following:
Lucene Index built. Took 329 seconds
Aug 5, 2007 10:41:54 PM org.apache.tomcat.util.http.Parameters
processParameters
WARNING: Parameters: Invalid chunk ignored.
org.apache.lucene.search.BooleanQuery$TooManyClauses: maxClauseCount is set
to 2048
at org.apache.lucene.search.BooleanQuery.add(BooleanQuery.java:165)
at org.apache.lucene.search.BooleanQuery.add(BooleanQuery.java:156)
at
org.apache.lucene.search.MultiTermQuery.rewrite(MultiTermQuery.java:63)
at org.apache.lucene.search.WildcardQuery.rewrite(WildcardQuery.java:54)
at
org.apache.lucene.search.IndexSearcher.rewrite(IndexSearcher.java:138)
at org.apache.lucene.search.Query.weight(Query.java:94)
at org.apache.lucene.search.Hits.<init>(Hits.java:42)
at org.apache.lucene.search.Searcher.search(Searcher.java:45)
at org.apache.lucene.search.Searcher.search(Searcher.java:37)
at
com.sodaitsolutions.instantsearch.model.PropertyDatabaseImpl.search(PropertyDatabaseImpl.java:306)
--
View this message in context:
http://www.nabble.com/Lucene-Indexing-and-searching---help-tf4022884.html#a11455374
Sent from the Lucene - Java Users mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]