Lucene etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Lucene etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

13 Aralık 2019 Cuma

Lucene SpellChecker Sınıfı

constructor
Şöyle yaparız.
SpellChecker spell = null;
try {
  Directory directory = FSDirectory.open(spellCheckerPath);
  spell = new SpellChecker(directory);
  spell .setAccuracy(0.5f);
} catch (IOException e) {
  e.printStackTrace();
}
indexDictionary metodu
Şöyle yaparız.
Dictionary dictionary = null;
try {
  BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(
    new FileInputStream(new File(fileName)), "UTF-8"));
  dictionary = new PlainTextDictionary(bufferedReader);
} catch (UnsupportedEncodingException e) {
  e.printStackTrace();
} catch (FileNotFoundException e) {
  e.printStackTrace();
} 


IndexWriterConfig indexWriterConfig = new IndexWriterConfig(Version.LUCENE_4_10_2,
  new StandardAnalyzer());
indexWriterConfig.setOpenMode(OpenMode.CREATE_OR_APPEND);
try {
  spell.indexDictionary(dictionary, indexWriterConfig, true);
  spell.close();
} catch (IOException e) {
  e.printStackTrace();
}

13 Haziran 2019 Perşembe

Lucene Analyzer Sınıfları

Giriş
Analyzer hem indeksleme hem de sorgulama için kullanılır. Bu yüzden her iki çağrıya da geçilir. Açıklaması şöyle.
The Analyzer is used by both indexing and queries to tell both how to parse text so they can think about the text in the same way. It sets up how to tokenize (what to split on, whether to toLower(), etc). 
Analyzer Sınıfı
Giriş
constructor
Örnek
Şöyle yaparız.
Analyzer analyzer = new EnglishAnalyzer();
Örnek
Şöyle yaparız.
public class LowercasingKeywordAnalyzer extends Analyzer {

  @Override
  protected TokenStreamComponents createComponents(String fieldName) {
    KeywordTokenizer keywordTokenizer = new KeywordTokenizer();
    TokenStream stream = new LowerCaseFilter(keywordTokenizer));
    return new TokenStreamComponents(keywordTokenizer, stream);
   }
}
tokenStream metodu
Örnek
Şöyle yaparız.
TokenStream tokenStream = analyzer.tokenStream(fieldName, reader);
Örnek
Şöyle yaparız.
Analyzer analyzer = ...;
TokenStream stream = analyzer.tokenStream("field", text);
SimpleAnalyzer Sınıfı
Giriş
Açıklaması şöyle.
Divides text at non-letter characters and puts text in lowercase

StandardAnalyzer Sınıfı
Giriş
Açıklaması şöyle.
Tokenizes text based on a sophisticated grammar that recognizes: e-mail addresses; acronyms; Chinese, Japanese, and Korean characters; alphanumerics; and more. Puts text in lowercase. Removes stop words
constrcutor
Örnek
Şöyle yaparız.
// Create the analyzer (has default stop words)
Analyzer analyzer = new StandardAnalyzer();
Örnek
Şöyle yaparız.
// Specify the analyzer for tokenizing text.
StandardAnalyzer analyzer = new StandardAnalyzer();
StopAnalyzer Sınıfı
Giriş
Açıklaması şöyle.
Removes stop words (not useful for searching) and puts text in lowercase.
WhitespaceAnalyzer Sınıfı
Giriş
Açıklaması şöyle.
Splits tokens at whitespace

2 Nisan 2018 Pazartesi

Lucene Query Sınıfları

BooleanClause Sınıfı
Giriş
Şu satırı dahil ederiz.
import org.apache.lucene.search.BooleanClause;
BooleanQuery Sınıfı
Giriş
Şu satırı dahil ederiz.
import org.apache.lucene.search.BooleanQuery;
Açıklaması şöyle.
You can construct powerful queries by combining any number of query objects using BooleanQuery. It uses query and a clause associated with a query that indicates if a query should occur, must occur, or must not occur. In a BooleanQuery, the maximum number of clauses is restricted to 1,024 by default. You can set the maximum classes by calling the setMaxClauseCount method.
constructor
Şöyle yaparız.
BooleanQuery booleanQuery = new BooleanQuery();
add metodu
Şöyle yaparız.
Query query = ...;
booleanQuery.add(query, BooleanClause.Occur.SHOULD));
FuzzyQuery Sınıfı
Giriş
Şu satırı dahil ederiz.
import org.apache.lucene.search.FuzzyQuery;
Açıklaması şöyle.
You can search for similar terms with FuzzyQuery, which matches words that are similar to your specified word. The similarity measurement is based on the Levenshtein (edit distance) algorithm. FuzzyQuery can be used to find a close match of a misspelled word "admnistrtor," though this word is not indexed.
cosntructor - Term + int
Benzerliği sayı ile belirtiriz. Açıklaması şöyle
Fuzzy difference between BlueCros and bluecross is 3

Örnek
Şöyle yaparız.
Directory directory = ...;
...
IndexReader reader = DirectoryReader.open(directory);
IndexSearcher searcher = new IndexSearcher(reader);

Query fuzzyQuery = new FuzzyQuery(new Term("content", "Company"), 2);

TopDocs results = searcher.search(fuzzyQuery, 5);
System.out.println("Hits: " + results.totalHits);
System.out.println("Max score:" + results.getMaxScore())
Örnek
Şöyle yaparız.
SpanQuery[] clauses = new SpanQuery[2];
clauses[0] = new SpanMultiTermQueryWrapper<FuzzyQuery>(new FuzzyQuery(
  new Term("content", "BlueCross"), 2));
clauses[1] = new SpanMultiTermQueryWrapper<FuzzyQuery>(new FuzzyQuery(
  new Term("content", "BlueShield"), 2));
SpanNearQuery query = new SpanNearQuery(clauses, 0, true);
Query Sınıfı
Şu satırı dahil ederiz.
import org.apache.lucene.search.Query;
QueryParser Sınıfı
Bu sınıf analyzer kullanır, bu yüzden büyük küçük harf farkından etkilenmez. Elde edilen Query nesnesi IndexSearcher'a verilir ve search() metodu çağrılır. Dönen sonuç TopDocs nesnesidir.
constructor
Şöyle yaparız
Analyzer analyzer = new EnglishAnalyzer();
//Note, both parent and child docs have a 'textContent' field
QueryParser queryParser = new QueryParser("textContent", analyzer);
parse metodu
Şöyle yaparız.
QueryParser queryParser = ...;
Query textQuery = queryParser.parse("foo bar");
TermQuery Sınıfı
Giriş
Şu satırı dahil ederiz.
import org.apache.lucene.search.TermQuery;
Açıklaması şöyle.
The most basic query type for searching an index. TermQuery can be constructed using a single term. The term value should be case-sensitive, but this is not entirely true. It is important to note that the terms passed for searching should be consistent with the terms produced by the analysis of documents, because analyzers perform many operations on the original text before building an index.
Bu sınıf analyzer kullanmadığı için büyük küçük harf araması farklı sonuçlar döndürebilir. QueryParser nesnesini kullanmak daha iyi olabilir.

Ayrıca bu sınıf tek kelimeleri aramak için daha iyi.

constructor
Örnek
Şöyle yaparız.
Query query = new TermQuery(new Term("fieldname", "This is the text to be indexed"));
Örnek
Şöyle yaparız.
String fieldName = ... String value = ...;
Term term = new Term(fieldName, value);
new TermQuery(term);
setBoost metodu
Şöyle yaparız.
TermQuery termQuery = new TermQuery(new Term("field", "value"));
termQuery.setBoost(2);