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 > >