2012-01-13 93 views
1

在這個美妙的網站的第一篇文章!Lucene:更改默認的facet分隔符?

我的目標是使用分層面搜索使用Lucene索引。但是,我的方面需要用「/」以外的字符(在本例中爲'〜')進行分隔。例如:

分類 分類〜組別 分類類別2〜

我已經創建了實現FacetIndexingParams接口(DefaultFacetIndexingParams與DEFAULT_FACET_DELIM_CHAR PARAM設置爲「〜」的副本)的類。

意譯索引代碼:(使用FSDirectory兩個指數和分類)

StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_34) 
IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_34, analyzer) 
IndexWriter writer = new IndexWriter(indexDir, config) 
TaxonomyWriter taxo = new LuceneTaxonomyWriter(taxDir, OpenMode.CREATE) 

Document doc = new Document() 
// Add bunch of Fields... hidden for the sake of brevity 
List<CategoryPath> categories = new ArrayList<CategoryPath>() 
row.tags.split('\\|').each{ tag -> 
    def cp = new CategoryPath() 
    tag.split('~').each{ 
     cp.add(it) 
    } 
    categories.add(cp) 
} 
NewFacetIndexingParams facetIndexingParams = new NewFacetIndexingParams() 
DocumentBuilder categoryDocBuilder = new CategoryDocumentBuilder(taxo, facetIndexingParams) 
categoryDocBuilder.setCategoryPaths(categories).build(doc) 
writer.addDocument(doc) 

// Commit and close both writer and taxo. 

搜索代碼轉述:

// Create index and taxonomoy readers to get info from index and taxonomy 
IndexReader indexReader = IndexReader.open(indexDir) 
TaxonomyReader taxo = new LuceneTaxonomyReader(taxDir) 
Searcher searcher = new IndexSearcher(indexReader) 

QueryParser parser = new QueryParser(Version.LUCENE_34, "content", new StandardAnalyzer(Version.LUCENE_34)) 
parser.setAllowLeadingWildcard(true) 
Query q = parser.parse(query) 
TopScoreDocCollector tdc = TopScoreDocCollector.create(10, true) 
List<FacetResult> res = null 
NewFacetIndexingParams facetIndexingParams = new NewFacetIndexingParams() 
FacetSearchParams facetSearchParams = new FacetSearchParams(facetIndexingParams) 
CountFacetRequest cfr = new CountFacetRequest(new CategoryPath(""), 99) 
cfr.setDepth(2) 
cfr.setSortBy(SortBy.VALUE) 
facetSearchParams.addFacetRequest(cfr) 
FacetsCollector facetsCollector = new FacetsCollector(facetSearchParams, indexReader, taxo) 

def cp = new CategoryPath("Category~Category1", (char)'~') 
searcher.search(DrillDown.query(q, cp), MultiCollector.wrap(tdc, facetsCollector)) 

結果總是以的形式返回面的列表「類別/組別「 。

我已經使用了盧克工具看指數,它顯示方面正在通過在索引中「〜」字符分隔。

什麼是做到這一點的最佳途徑?任何幫助是極大的讚賞!

回答

3

我已經找到了問題。搜索和索引按照它們應有的方式工作。這是我如何得到問題的方面結果。我用的是:

res = facetsCollector.getFacetResults() 
res.each{ result -> 
    result.getFacetResultNode().getLabel().toString() 
} 

我需要什麼用途是:

res = facetsCollector.getFacetResults() 
res.each{ result -> 
    result.getFacetResultNode().getLabel().toString((char)'~') 
} 

的區別是發送給函數的toString的放慢參數!

容易忽略,很難找到。

希望這會幫助別人。