Lucene'de, alanlı bir metni aramak için TermQuery'yi kullanabiliriz. Bir gruptaki veya tüm aranabilir alanlardaki bir anahtar kelimeyi nasıl arayacağımı merak ediyorum.Tüm alanlar arasında nasıl arama yapılır?
cevap
İ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
Çalışma zamanında hedef alan listesini biliyorsanız, yaklaşım 2'yi kullanın. Aksi halde, 1. yaklaşımı kullanmalısın.
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.
"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;
vb.net aynı quesiton iyi büyük resmi açıklama için
Burada ördek yazmayı kullanma noktasını göremiyorum (yani, "dinamik" anahtar sözcüğü). Belki de tür varyasyonunu "var" ile kullanmak isterdiniz? –
- 1. Django - Arama ilişkili alanlar
- 2. Arama dinamiği nasıl yapılır
- 3. Hql'de iki tarih arasında dinamik olarak nasıl arama yapılır?
- 4. LINQ'den Entity'ye iki tarih arasında nasıl arama yapılır?
- 5. Android kodu ve yerel kod arasında nasıl geri arama yapılır?
- 6. J2ME: Nasıl arama yapılır?
- 7. ControlCenter'dan nasıl arama yapılır?
- 8. İşaretlenmemiş tüm onay kutuları arasında nasıl geçiş yapılır?
- 9. Vektördeki tüm alt vektörler arasında nasıl yineleme yapılır?
- 10. Arama Etkinliği - İfade - Nasıl Yapılır
- 11. Endeksli dinamik alanlar için Solr arama sorgusu
- 12. Arama WooCommerce siparişler özel Muhtemelen alanlar
- 13. Elasticsearch: kullanıcı_adılı bir alanda nasıl arama yapılır?
- 14. elasticserch'te farklı alanlar nasıl sorgulanır?
- 15. Entity Framework 6'da nasıl arama yapılır?
- 16. Tüm div tıklatması nasıl yapılır
- 17. Viewflipper ile etkinlikler arasında nasıl geçiş yapılır
- 18. Android'de yazılabilir dize arasında nasıl boşluk yapılır?
- 19. Onclick sırasında parçalar arasında nasıl geçiş yapılır?
- 20. İki değişken arasında nasıl birleştirme yapılır?
- 21. MongoDB nesnenin dizideki arama nasıl yapılır
- 22. Boş bir Kotlin dizisinde nasıl arama yapılır?
- 23. chrome omnibox alan adında nasıl arama yapılır
- 24. Odt'ta nasıl arama yapılır ve değiştirilir?
- 25. Tupleların bir listesi üzerinde nasıl arama yapılır?
- 26. Android custom InputMethodService'de anahtarla nasıl arama yapılır?
- 27. Kullanıcı tarafından bir değişiklik arama nasıl yapılır
- 28. Lucene arama sonuçlarında gruplama nasıl yapılır?
- 29. Coffeescript'te geri arama işlevi nasıl yapılır
- 30. FFmpeg'de nasıl arama yapılır C/C++
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