2013-03-02 44 views

cevap

9

İki

1) Endeksi zamanlı bir yaklaşım yaklaşır: Bir tümünü yakalama alanını kullanın. Bu, tüm alanlardan (giriş belgenizden toplam metin) tüm metni eklemeye ve tek bir alanda büyük metinlere neden olan bir yere eklemekten başka bir şey değildir. Tümünü yakalama alanı olarak hareket etmek için dizin oluştururken ek bir alan eklemelisiniz.

2) Arama zamanı yaklaşımı: Örneğin, TermQuery örnekleri gibi birden çok soruyu birleştirmek için BooleanQuery kullanın. Tüm hedef alanları kapsayacak şekilde çoklu sorgular oluşturulabilir. Makalenin sonundaki

Example.

Çalışma zamanında hedef alan listesini biliyorsanız, yaklaşım 2'yi kullanın. Aksi halde, 1. yaklaşımı kullanmalısın.

+0

Teşekkür benim geçirgen cevabı kontrol etmek. İlk yaklaşım, farklı indeks türlerini aynı indekste saklarken kullandığım, örneğin her dokümanda farklı alanların olduğu Monitörler ve Monitörler, ancak basit bir arama dizisiyle "tam metin" aramayı kullanmak ve geri getirmek istiyorum. eşleşen ürünler. – nothingisnecessary

20

Zaten sahip olduğunuzdan başka bir şeyi dizine eklemeyi gerektirmeyen başka bir yaklaşım veya farklı sorguları birleştirmek için MultiFieldQueryParser kullanıyor.

Arama yapmak istediğiniz alanların ve sorgunuzun bir listesini sağlayabilirsiniz, hepsi bu.

MultiFieldQueryParser queryParser = new MultiFieldQueryParser(
       Version.LUCENE_41, 
       new String[]{"title", "content", "description"}, 
       new StandardAnalyzer(Version.LUCENE_41)); 

Query query = queryParser.parse("here goes your query"); 

Bu, Java'da yazılmış orijinal lucene kitaplığı ile bunu nasıl yaparım. Ben de MultiFieldQueryParser'un lucene.net'de mevcut olup olmadığından emin değilim.

+0

MultiFieldQueryParser zarif bir yaklaşımdır .. :) – phani

+0

Teşekkürler, cevabınız ya da kötü değil;) +1 – javanna

3

"MultifieldQueryParser" kullanarak tüm alanlarda arama yapmak için başka bir kolay yaklaşım, IndexReader.FieldOption.ALL sorgunuzu kullanmaktır.

Örnek olarak C# örneğidir.

Directory directory = FSDirectory.Open(new DirectoryInfo(HostingEnvironment.MapPath(VirtualIndexPath))); 

    //get analyzer 
    Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29); 

    //get index reader and searcher 
    IndexReader indexReader__1 = IndexReader.Open(directory, true); 
    Searcher indexSearch = new IndexSearcher(indexReader__1); 

    //add all possible fileds in multifieldqueryparser using indexreader getFieldNames method 
    dynamic queryParser = new MultiFieldQueryParser(Version.LUCENE_29, indexReader__1.GetFieldNames(IndexReader.FieldOption.ALL).ToArray(), analyzer); 
    dynamic query = queryParser.Parse(Criteria); 
    TopDocs resultDocs = null; 

    //perform search 
    resultDocs = indexSearch.Search(query, indexReader__1.MaxDoc()); 
    dynamic hits = resultDocs.scoreDocs; 

click here

vb.net aynı quesiton iyi büyük resmi açıklama için

+0

Burada ördek yazmayı kullanma noktasını göremiyorum (yani, "dinamik" anahtar sözcüğü). Belki de tür varyasyonunu "var" ile kullanmak isterdiniz? –