Hello,
I am quite new to Lucene.
I've added a search to my application by combining the getting started application and the xml#1 contribution.

Here are the methods used to generate the index.

        public static void generateIndex() {
                try {
                        if (!docDir.exists() || !docDir.canRead()) {
System.out.println("Document directory '" +docDir.getAbsolutePath() + "' does not exist or is not readable, please check the path");
                                System.exit(1);
                        }       
IndexWriter writer = new IndexWriter(INDEX_DIR, new StandardAnalyzer(), true);
                        indexDocs(writer, docDir);
                        writer.optimize();
                        writer.close();
                } catch (IOException e) {
                        System.out.println(e.getMessage());
                }
        }

private static void indexDocs(IndexWriter writer, File file) throws IOException {
                if (file.canRead()) {
                        if (!file.getName().substring(0, 1).equals(".")) {
                                if (file.isDirectory() && file.equals(docDir)) {
                                        String[] files = file.list();
                                        if (files != null) {
                                                for (int i=0; i<files.length; 
i++) {                 
                                                        indexDocs(writer, new 
File(file+"/"+files[i]));
                                                }
                                        }
                                }
                                else {
                                        try {
                                                saxParserFactory = 
SAXParserFactory.newInstance();
                                                
saxParserFactory.setValidating(false);
                                                SAXParser saxParser = 
saxParserFactory.newSAXParser();
                                                xmlReader = 
saxParser.getXMLReader();

                                                transformerFactory = 
TransformerFactory.newInstance();
Transformer transformer = transformerFactory.newTransformer(new StreamSource(xslFileSite.toURL().toString()));
                                                xmlIndexer = new 
XMLIndexer(writer,xmlReader,transformer);
                                                xmlIndexer.indexFile(file);
                                        }
                                        catch (Exception ex) {
                                                System.out.println(ex);
                                        }
                                }
                        }
                }                       
        }

   public void startElement(String namespaceURI, String localName,
                            String rawName, Attributes atts)
                throws SAXException
   {
        if(rawName.equals("field") || rawName.equals("datefield"))
        {
                currentField = new FieldHolder();
                        currentField.type = rawName;
                        currentField.name = atts.getValue("name");
                        currentField.value = new StringBuffer();
currentField.store = atts.getValue("store").equals("true") ? true:false; currentField.index = atts.getValue("index").equals("true") ? true:false; currentField.token = atts.getValue("token").equals("true") ? true:false;
                        inField = true;
                }
   }

public void characters(char[] ch, int start, int length) throws SAXException
   {
                if(inField)
                {
                        currentField.value.append(ch,start,length);
                }
        }

        public void endElement(java.lang.String namespaceURI,
                      java.lang.String localName,
                      java.lang.String qName)
               throws SAXException
        {
                fieldHolders.add(currentField);
                inField = false;
        }

        public void indexFile(File xmlFile) throws Exception
        {
                if(xmlFile.exists())
                {
                        try
                        {
ByteArrayOutputStream byteOutputStream = new ByteArrayOutputStream((int)(xmlFile.length())*2); BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(byteOutputStream);
                                StreamResult streamResult = new 
StreamResult(bufferedOutputStream);

                                FileInputStream fileInputStream = new 
FileInputStream(xmlFile);
StreamSource streamSource = new StreamSource(new BufferedInputStream(fileInputStream));
                                
transformer.transform(streamSource,streamResult);
BufferedInputStream inputStream = new BufferedInputStream(new ByteArrayInputStream(byteOutputStream.toByteArray()));
                                xmlReader.parse(new InputSource(inputStream));

                                Document doc = new Document();
                                for(int i=0; i<2; i++)
                                {
                                        FieldHolder fieldHolder = 
(FieldHolder)(fieldHolders.get(i));
                                        
                                        //Modified by Johannes Dorn
                                        Field.Store store = Field.Store.YES;
                                        if (fieldHolder.store == false)
                                                store = Field.Store.NO;
                                        
                                        Field.Index index = Field.Index.NO;
                                        if (fieldHolder.index) {
                                                if (fieldHolder.token)
                                                        index = 
Field.Index.TOKENIZED;
                                                else
                                                        index = 
Field.Index.UN_TOKENIZED;
                                        }
                                        
                        //              
if(!fieldHolder.value.toString().trim().equals(""))
doc.add(new Field(fieldHolder.name,fieldHolder.value.toString(),store,index));
                                        //End of Modifications
                                }
                                writer.addDocument(doc);
                        }
                        catch (Exception exception)
                        {
                                transformer.clearParameters();
                                //put log messages here
                        }
                }
                else
                {
                        //put log messages here
                }
        }

And now the search:

public static Vector<String> search(String searchText) throws Exception {
                Vector<String> result = new Vector<String>();
                String index = "index";
                String defaultField = "text";

                IndexReader reader = IndexReader.open(index);
                Searcher searcher = new IndexSearcher(reader);
                Analyzer analyzer = new StandardAnalyzer();

                QueryParser parser = new QueryParser(defaultField, analyzer);

                Query query = parser.parse(searchText);

                Hits hits = searcher.search(query);
                for (int i = 0; i < hits.length(); i++) {
                        Document doc = hits.doc(i);
                        String path = doc.get("path");
                        if (path != null) {
                                String title = path;
                                int pos = title.indexOf("/");
                                title = title.substring(pos+1);
                                pos = title.indexOf("/");
                                title = title.substring(pos+1);
                                if (title != null) {
                                        result.add(title);
                                }
                        } else {
                        }
                }
                reader.close();
                searcher.close();
                return result;
        }


Right now, I only index and search two files.
If i search for a word, that is in either of these files, hits has three docs, all of whice are null.

What am i doing wrong here?

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to