Hi

Sounds like you should use FieldType.setTokenized(false).  For the
equivalent field in some of my lucene indexes I use

FieldType idf = new FieldType();
idf.setStored(true);
idf.setOmitNorms(true);
idf.setIndexOptions(IndexOptions.DOCS);
idf.setTokenized(false);
idf.freeze();

There's also PerFieldAnalyzerWrapper,  in oal.analysis.miscellaneous for
version 6.x although I have a feeling it was elsewhere in earlier versions.


--
Ian.



On Fri, Feb 17, 2017 at 12:26 PM, Armnotstrong <zhaoxmu...@gmail.com> wrote:

> Thanks, Ian:
>
> You saved my day!
>
> And there is a further question to ask:
>
> Since the analyzer could only be configured through the IndexWriter,
> using  different
> analyzers for different Fields is not possible, right? I only want
> this '_id' field to identify
> the document in index, so I could update or delete the specific
> document from index
> when needed, the real searching field is a text field, which should be
> analysed by
> smart_cn analyser.
>
> Thus, I think it will good to have such an configure option as
> IndexOptions.NOT_ANALYSED.
> I remember to have that in the old version of lucene, but not found in
> version 5.x
>
> Any suggestion to bypass that?
>
> Sorry for my bad English.
>
> 2017-02-17 19:40 GMT+08:00 Ian Lea <ian....@gmail.com>:
> > Hi
> >
> >
> > SimpleAnalyzer uses LetterTokenizer which divides text at non-letters.
> > Your add and search methods use the analyzer but the delete method
> doesn't.
> >
> > Replacing SimpleAnalyzer with KeywordAnalyzer in your program fixes it.
> > You'll need to make sure that your id field is left alone.
> >
> >
> > Good to see a small self-contained test program.  A couple of suggestions
> > to make it even better if there's a next time:
> >
> > Use final static String ID = "_id" and ... KEY =
> > "5836962b0293a47b09d345f1".  Minimises the risk of typos.
> >
> > And use RAMDirectory.  Means your program doesn't leave junk on my disk
> if
> > I run it, and also means it starts with an empty index each time.
> >
> >
> > --
> > Ian.
> >
> >
> > On Fri, Feb 17, 2017 at 10:04 AM, Armnotstrong <zhaoxmu...@gmail.com>
> wrote:
> >
> >> Hi, all:
> >>
> >> I am Using version 5.5.4, and find can't delete a document via the
> >> IndexWriter.deleteDocuments(term) method.
> >>
> >> Here is the test code:
> >>
> >> import org.apache.lucene.analysis.core.SimpleAnalyzer;
> >> import org.apache.lucene.document.Document;
> >> import org.apache.lucene.document.Field;
> >> import org.apache.lucene.document.FieldType;
> >> import org.apache.lucene.index.*;
> >> import org.apache.lucene.queryparser.classic.ParseException;
> >> import org.apache.lucene.queryparser.classic.QueryParser;
> >> import org.apache.lucene.search.IndexSearcher;
> >> import org.apache.lucene.search.Query;
> >> import org.apache.lucene.search.ScoreDoc;
> >> import org.apache.lucene.store.Directory;
> >> import org.apache.lucene.store.FSDirectory;
> >>
> >> import java.io.IOException;
> >> import java.nio.file.Paths;
> >>
> >> public class TestSearch {
> >>     static SimpleAnalyzer analyzer = new SimpleAnalyzer();
> >>
> >>     public static void main(String[] argvs) throws IOException,
> >> ParseException {
> >>         generateIndex("5836962b0293a47b09d345f1");
> >>         query("5836962b0293a47b09d345f1");
> >>         delete("5836962b0293a47b09d345f1");
> >>         query("5836962b0293a47b09d345f1");
> >>
> >>     }
> >>
> >>     public static void generateIndex(String id) throws IOException {
> >>         Directory directory = FSDirectory.open(Paths.get("/
> >> tmp/test/lucene"));
> >>         IndexWriterConfig config = new IndexWriterConfig(analyzer);
> >>         IndexWriter iwriter = new IndexWriter(directory, config);
> >>         FieldType fieldType = new FieldType();
> >>         fieldType.setStored(true);
> >>         fieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS_
> >> AND_POSITIONS_AND_OFFSETS);
> >>         Field idField = new Field("_id", id, fieldType);
> >>         Document doc = new Document();
> >>         doc.add(idField);
> >>         iwriter.addDocument(doc);
> >>         iwriter.close();
> >>
> >>     }
> >>
> >>     public static void query(String id) throws ParseException,
> IOException
> >> {
> >>         Query query = new QueryParser("_id", analyzer).parse(id);
> >>         Directory directory = FSDirectory.open(Paths.get("/
> >> tmp/test/lucene"));
> >>         IndexReader ireader  = DirectoryReader.open(directory);
> >>         IndexSearcher isearcher = new IndexSearcher(ireader);
> >>         ScoreDoc[] scoreDoc = isearcher.search(query, 100).scoreDocs;
> >>         for(ScoreDoc scdoc: scoreDoc){
> >>             Document doc = isearcher.doc(scdoc.doc);
> >>             System.out.println(doc.get("_id"));
> >>         }
> >>     }
> >>
> >>     public static void delete(String id){
> >>         try {
> >>              Directory directory =
> >> FSDirectory.open(Paths.get("/tmp/test/lucene"));
> >>             IndexWriterConfig config = new IndexWriterConfig(analyzer);
> >>             IndexWriter iwriter = new IndexWriter(directory, config);
> >>             Term term = new Term("_id", id);
> >>             iwriter.deleteDocuments(term);
> >>             iwriter.commit();
> >>             iwriter.close();
> >>         }catch (IOException e){
> >>             e.printStackTrace();
> >>         }
> >>     }
> >> }
> >>
> >>
> >> --
> >> ========================================
> >> best regards & a nice day
> >> Zhao Ximing
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
> >> For additional commands, e-mail: java-user-h...@lucene.apache.org
> >>
> >>
>
>
>
> --
> ========================================
> best regards & a nice day
> Zhao Ximing
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
> For additional commands, e-mail: java-user-h...@lucene.apache.org
>
>

Reply via email to