1

私は、誰かが2つの別々の単語(「赤い納屋」など)を検索した場合に、「赤い納屋」、「赤い納屋」、「大きな茶色の納屋の横にある赤いトラクター」を含むレコードを返すという素晴らしい仕事をしています。 "。これはすばらしいことですが、結果には「redbarn」を含むものは返されません(特に「redbarn」を検索しても、「redbarn」レコードは取得されません)。

現在、標準のアナライザーを使用していますが、必要なすべてのレコードを取得するために何を変更する必要があるかわかりません。

重要な場合は、ElasticSearch(内部ではLucene)の上でNESTクライアントを使用しています。利用可能なさまざまなアナライザーとプロパティを調査しましたが、これを行うための適切な組み合わせが見つかりませんでした。

4

2 に答える 2

3

これを行う最良の方法は、「redbarn」を["red"、"barn"]としてトークン化するアナライザーを作成することです。Luceneはすでにドイツ語でそれを行っています。たとえば、 DictionaryCompoundWordTokenFilterを見ることができます。

于 2012-07-16T13:52:59.243 に答える
-1

ほとんどの場合、標準のアナライザーが機能しますが、詳細なテキスト分析が必要な場合は、独自のアナライザーを作成する必要があります。

Solrに付属のWorldDelimeterFilterは、問題を解決するはずです。SolrはLuceneの上に構築されているため、solrに付属のフィルターを使用しても問題はありません。以下の例を参照してください。

public class CustomAnalyzer extends Analyzer { 
  public TokenStream tokenStream(String fieldName, Reader reader) { 
    TokenStream ts = new WhitespaceTokenizer(reader); 
    ts = new WordDelimiterFilter(ts, 1, 1, 1, 1, 1); 
    ts = new LowerCaseFilter(ts); 
    return ts; 
  } 
} 
于 2012-07-16T17:14:50.790 に答える