0

プロジェクトで Lucene 4.3 を使用して全文検索機能を作成しています。データを追加するとすべて正常に動作しますが、クエリを実行すると、クエリの少なくとも 1 つの単語がフィールドの値の少なくとも 1 つの単語と一致する場合にのみヒットします。インデックス。

たとえば、追加した場合

private static StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_43);
public static void addCustomerDoc(Map<String, String[]> parameters, String path, long customerId) throws IOException {
    File file = new File(path + "/index/");
    FSDirectory indexDir = FSDirectory.open(file);
    IndexWriterConfig config = new IndexWriterConfig(Version.LUCENE_43, analyzer);
    IndexWriter writer = new IndexWriter(indexDir, config);
    Document doc = new Document();
    doc.add(new TextField("email", parameters.get("email")[0].toString(), Field.Store.YES));
    doc.add(new TextField("username", parameters.get("username")[0].toString(), Field.Store.YES));
    doc.add(new TextField("phone", parameters.get("phone")[0].toString(), Field.Store.YES));
    doc.add(new StringField("customerId", "" + customerId, Field.Store.YES));
    addDoc(writer, doc);
    writer.close();
}

private static void addDoc(IndexWriter writer, Document doc) throws IOException {
    writer.addDocument(doc);
    writer.commit();
}

のようなユーザーを追加する

  1. ユーザー名 = フーバー
  2. 電子メール = foobar@example.com
  3. 電話番号 = 0723123456

foo、fooba、または foobarx を検索してもヒットしません。f を入力したり、foobar という単語を超えたりしても結果が得られないのでしょうか?

4

1 に答える 1

0

クエリ パーサーの構文を探している場合は、ワイルドカードファジークエリの構文を調べる必要があります。

次のような funtax で接頭辞を検索できます。

username:foob*

また、代わりにファジー クエリを使用できます。

username:foobarx~

または、次のように、0 から 1 の間の数値を使用して、ファジー クエリの緩さを制限できます。数値が大きいほど制限が厳しくなります。

username:foorbarx~0.5
于 2013-07-06T08:39:39.970 に答える