1

いくつかのファセットを使用してインデックスを作成しようとしています。ユーザー ガイドに従っています。

しかし、問題が発生しました。ユーザー ガイドの次の行でエラーが発生します。

DocumentBuilder categoryDocBuilder = new CategoryDocumentBuilder(taxo);

DocumentBuilderと の両方が..CatergoryDocumentBuilderに存在しません。lucene-facet

Jira の問題で API の変更を見つけることができません。

4

2 に答える 2

2

ベンチマークコードをインスピレーションとして使用してそれを理解しました。

索引付け

Directory dir      = FSDirectory.open( new File("index" ));
Directory dir_taxo = FSDirectory.open( new File("index-taxo" ));
IndexWriter writer = newIndexWriter(dir);
TaxonomyWriter taxo = new DirectoryTaxonomyWriter(dir_taxo, OpenMode.CREATE);
FacetFields ff= new FacetFields(taxo);

//for all documents:
d=new Document();
List<CategoryPath>=new ArrayList<CategoryPath>();    

for (all fields in doc)
{
    d.addField( ....)
}
for (all categories in doc)
{ 
    CategoryPath cp = new CategoryPath(field, value);
    categories.add( cp);
    taxo.addCategory(cp); //not sure if necessary
}

ff.addFields(d, categories);
w.addDocument( d );

検索中:

Directory dir = FSDirectory.open( new File("index" ));
Directory dir_taxo = FSDirectory.open( new File("index-taxo" ));

final DirectoryReader indexReader = DirectoryReader.open(dir);
IndexSearcher searcher = new IndexSearcher(indexReader);
TaxonomyReader taxo = new DirectoryTaxonomyReader(dir_taxo);

Query q = new TermQuery(new Term(...));
TopScoreDocCollector tdc = TopScoreDocCollector.create(1, true);
FacetSearchParams facetSearchParams = new FacetSearchParams(new CountFacetRequest(new CategoryPath("mycategory"),10));
FacetsCollector facetsCollector = new FacetsCollector(facetSearchParams, indexReader, taxo);
long ts= System.currentTimeMillis();
searcher.search(q, MultiCollector.wrap(tdc, facetsCollector));
List<FacetResult> res = facetsCollector.getFacetResults();  
long te= System.currentTimeMillis();
for (FacetResult fr:res)
{
    for ( FacetResultNode sr : fr.getFacetResultNode().getSubResults())
        {
           System.out.println(String.format( "%s :  %f", sr.getLabel(), sr.getValue()));
        }
    }
    System.out.println(String.format("Search took: %d millis", (te-ts)));
}
于 2013-02-08T15:38:53.473 に答える
0

私は Lucene 4.1 のみのバージョン 2.9 に精通していません。

しかし、結果内にファセットを作成するときは、通常、プロジェクトのサンプル コードの下にある Lucene.Net.Search.SimpleFacetedSearch.dll を使用します。

ウーター

        Dictionary<String, long> facetedResults = new Dictionary<String, long>();

        try
        {
            SimpleFacetedSearch.MAX_FACETS = int.MaxValue;
            SimpleFacetedSearch sfs = new SimpleFacetedSearch(indexReader, field);
            SimpleFacetedSearch.Hits facetedHits = sfs.Search(query);
            long totalHits = facetedHits.TotalHitCount;

            for (int ihitsPerFacet = 0; ihitsPerFacet < facetedHits.HitsPerFacet.Count(); ihitsPerFacet++)
            {
                long hitCountPerGroup = facetedHits.HitsPerFacet[ihitsPerFacet].HitCount;
                SimpleFacetedSearch.FacetName facetName = facetedHits.HitsPerFacet[ihitsPerFacet].Name;

                if (hitCountPerGroup > 0)
                    facetedResults.Add(facetName.ToString(), hitCountPerGroup);
            }
        }
        catch (Exception ex)
        {
            facetedResults.Add(ex.Message, -1);
        }
于 2013-02-08T15:09:50.377 に答える