I've done some stuff regarding this:

   - Added "similarity" configuration parameter (although not very tested
   since I don't really know how lucene similarity works).
   - Added QueryContext#topDocs(int) which you can set so that only top N
   hits are retrieved instead of all (may or may not be a performance
   improvement in some scenarios).
   - Added IndexHits#currentScore() so that lucene scores are exposed
   (although not stuff that's added, but not yet committed, in the current
   neo4j transaction if such is open).

I also found some minor performance improvements while doing all this. It'd
be wonderful to have you try this out and tell about how it works out.

These changes will be in the next milestone M05, but you can get latest
snapshots, as we speak, from our repositories.

2010/11/19 Samuel Feng <[email protected]>

> I think it is ok.  It is good no need to use a Similarity instance for each
> query.
>
> 2010/11/19 Mattias Persson <[email protected]>
>
> > There's also a problem going with the QueryContext approach... an
> > IndexSearcher can be shared by multiple threads and multiple queries so
> > using IndexSearcher#setSimilarity can't be done on a per-query basis.
> > Setting a similarity in one query may also set it for another
> thread/query
> > which might not want it. So maybe the only option is to go with the
> > configuration parameter, so that all IndexWriters and IndexSearchers for
> > that index gets that Similarity instance set.
> >
> > WDYT?
> >
> > 2010/11/18 Mattias Persson <[email protected]>
> >
> > > Allright, then there probably have to be a configuration parameter for
> > > similarity, and maybe something in QueryContext as well (if you
> wouldn't
> > use
> > > the configuration parameter).
> > >
> > >
> > > 2010/11/18 Samuel Feng <[email protected]>
> > >
> > >> From
> > >>
> > >>
> >
> http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/Similarity.html
> > >>
> > >> <
> > >>
> >
> http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/Similarity.html
> > >> >If
> > >> the custom Similarity overwrite the
> > >> *lengthNorm<
> > >>
> >
> http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/Similarity.html#lengthNorm(java.lang.String<http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/Similarity.html#lengthNorm%28java.lang.String>
> > <
> >
> http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/Similarity.html#lengthNorm%28java.lang.String
> > >
> > >> ,
> > >> int)>*(field)<
> > >>
> >
> http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/Similarity.html#lengthNorm(java.lang.String<http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/Similarity.html#lengthNorm%28java.lang.String>
> > <
> >
> http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/Similarity.html#lengthNorm%28java.lang.String
> > >
> > >> ,
> > >> int)> method of DefaultSimilarity, need to set the Similarity during
> > >> writing
> > >> index.
> > >>
> > >>
> > >> 2010/11/19 Mattias Persson <[email protected]>
> > >>
> > >> > 2010/11/18 Samuel Feng <[email protected]>
> > >> >
> > >> > > Hi,
> > >> > >
> > >> > > To my understanding, if you use one
> > >> > > Similarity in indexWriter, you should also use it in
> indexSearcher.
> > >> > >
> > >> > > And the scoring is not written during writing index, as it depends
> > on
> > >> the
> > >> > > relationship between query terms and the indexed documents. It is
> > >> > > calculated
> > >> > > for each query.
> > >> > >
> > >> >
> > >> > But is it a benefit to use it in writer and/or searcher? Is the
> > >> similarity
> > >> > needed at all during writing?
> > >> >
> > >> >
> > >> > >
> > >> > >
> > >> > > 2010/11/18 Mattias Persson <[email protected]>
> > >> > >
> > >> > > > > > Hi,
> > >> > > >
> > >> > > > > > >
> > >> > > > >> > > I am new to neo4j.
> > >> > > > >> > >
> > >> > > > >> > > I am using a custom analyzer in index in order to support
> > >> > Chinese.
> > >> > > > >> > >
> > >> > > > >> > >    chnIndex =
> > >> this.graphDb.index().forNodes("product_chinese",
> > >> > > > >> > >        MapUtil.stringMap("analyzer",
> > >> > > > >> > > "org.wltea.analyzer.lucene.IKAnalyzer"));
> > >> > > > >> > >
> > >> > > > >> > > Below is the usage of the IKAnalyzer in lucence.
> > >> > > > >> > >
> > >> > > > >> > >      IndexSearcher isearcher = new
> > IndexSearcher(directory);
> > >> > > > >> > >      isearcher.setSimilarity(new IKSimilarity());   // A
> > >> custom
> > >> > > > >> > Similarity
> > >> > > > >> > >      String word = "OLYMPUS 奥林巴斯 E-PL1 时尚白 微型4/3系统相机 套机
> > >> > > 含14-42mm镜头";
> > >> > > > >> > >      Query query = IKQueryParser.parse(fieldName, word );
> >  //
> > >> A
> > >> > > > custom
> > >> > > > >> > > QueryParser
> > >> > > > >> > >      TopDocs topDocs = isearcher.search(query, 5); // Got
> > the
> > >> > top
> > >> > > 5
> > >> > > > >> > >      System.out.println("Found " + topDocs.totalHits);
> > >> > > > >> > >      ScoreDoc[] scoreDocs = topDocs.scoreDocs;
> > >> > > > >> > >      for (int i = 0; i < topDocs.totalHits; i++) {
> > >> > > > >> > >        System.out.println(scoreDocs[i].score); // Got the
> > >> score
> > >> > of
> > >> > > > >> each
> > >> > > > >> > > matched doc
> > >> > > > >> > >        Document targetDoc =
> > isearcher.doc(scoreDocs[i].doc);
> > >> > > > >> > >        System.out.println("Document content is " +
> > >> > > > >> targetDoc.toString());
> > >> > > > >> > >      }
> > >> > > > >> > >
> > >> > > > >> > > How can I use the query method of neo4j's indexing to
> > >> implement
> > >> > > > >> > > 1) Add my custom Similartiy implemtation
> > >> > > > >>
> > >> > > > >
> > >> > > > Btw, what's the difference between setting Similarity on
> > IndexWriter
> > >> > vs.
> > >> > > > IndexSearcher? Is it performance maybe, that if it's set on the
> > >> > > IndexWriter
> > >> > > > then the scoring is written during writes, but if it's set on
> > >> > > IndexSearcher
> > >> > > > it's calculated for each query?
> > >> > > > _______________________________________________
> > >> > > > Neo4j mailing list
> > >> > > > [email protected]
> > >> > > > https://lists.neo4j.org/mailman/listinfo/user
> > >> > > >
> > >> > > _______________________________________________
> > >> > > Neo4j mailing list
> > >> > > [email protected]
> > >> > > https://lists.neo4j.org/mailman/listinfo/user
> > >> > >
> > >> >
> > >> >
> > >> >
> > >> > --
> > >> > Mattias Persson, [[email protected]]
> > >> > Hacker, Neo Technology
> > >> > www.neotechnology.com
> > >> > _______________________________________________
> > >> > Neo4j mailing list
> > >> > [email protected]
> > >> > https://lists.neo4j.org/mailman/listinfo/user
> > >> >
> > >> _______________________________________________
> > >> Neo4j mailing list
> > >> [email protected]
> > >> https://lists.neo4j.org/mailman/listinfo/user
> > >>
> > >
> > >
> > >
> > > --
> > > Mattias Persson, [[email protected]]
> > > Hacker, Neo Technology
> > > www.neotechnology.com
> > >
> >
> >
> >
> > --
> > Mattias Persson, [[email protected]]
> > Hacker, Neo Technology
> > www.neotechnology.com
> > _______________________________________________
> > Neo4j mailing list
> > [email protected]
> > https://lists.neo4j.org/mailman/listinfo/user
> >
> _______________________________________________
> Neo4j mailing list
> [email protected]
> https://lists.neo4j.org/mailman/listinfo/user
>



-- 
Mattias Persson, [[email protected]]
Hacker, Neo Technology
www.neotechnology.com
_______________________________________________
Neo4j mailing list
[email protected]
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to