1

私のドキュメントは次のように索引付けされています。

{
    title: "stuff here",
    description: "stuff here",
    keywords: "stuff here",
    score1: "number here",
    score2: "number here"
}

次のようなクエリを実行したい:

  • タイトル、説明、およびキーワードのフィールドを使用して、テキスト用語を照合します。
  • 完全に一致する必要はありません。例えば。誰かが「Ihaveabig nose」を検索し、「nose」がドキュメントタイトルの1つに含まれているが、「big」が含まれていない場合でも、このドキュメントは返されます。

編集:私はこのクエリを試しましたが、機能します。これが正しい方法であるかどうかを誰かが確認できますか?ありがとう。

{
    query:{
        'multi_match':{
            'query': q,
            'fields': ['title^2','description', 'keywords'],
        }
    }
}
4

3 に答える 3

2

あなたのやり方は間違いなく進むべき道です!

multi_matchクエリは、通常、エンド ユーザーに公開したいものです。一方、query_stringは似ていますが、lucene クエリ構文を公開するため、より強力で危険でもあります。経験則: 必要がない場合は、クエリ文字列を使用しないでください。

また、 bool queryを必要とせずに、検索したいフィールドのリストを提供するだけで、複数のフィールドを簡単に検索できます。

于 2013-03-05T14:08:20.210 に答える
0

HTTP Postリクエストを実行するための対応するJSONオブジェクトは、次のようになります。

{
  "bool": {
    "should": [
      {
        "query_string": {
          "query": "I have a big nose",
          "default_field": "title"
        }
      },
      {
        "query_string": {
          "query": "I have a big nose",
          "default_field": "description"
        }
      },
      {
        "query_string": {
          "query": "I have a big nose",
          "default_field": "keywords"
        }
      }
    ],
    "minimum_number_should_match": 1,
    "boost": 1
  }
}
于 2013-03-05T09:16:06.640 に答える
0

以下は、使用できるクエリを作成するコードです。私はc#で書きましたが、他の言語でも同じように動作します。

必要なことは、BooleanQueryを作成し、その条件の少なくとも 1 つが一致する必要があることを設定することです。次に、 Occur.SHOULD列挙値でチェックするすべてのドキュメント フィールドの条件を追加します。

BooleanQuery searchQuery = new BooleanQuery();
searchQuery.SetMinimumNumberShouldMatch(1);

QueryParser parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "title", new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29));
Query titleQuery = parser.Parse("I have a big nose");
searchQuery.Add(titleQuery, BooleanClause.Occur.SHOULD);

parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "description", new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29));
Query descriptionQuery = parser.Parse("I have a big nose");
searchQuery.Add(titleQuery, BooleanClause.Occur.SHOULD);

parser = new QueryParser(Lucene.Net.Util.Version.LUCENE_29, "keywords", new StandardAnalyzer(Lucene.Net.Util.Version.LUCENE_29));
Query keywordsQuery = parser.Parse("I have a big nose");
searchQuery.Add(titleQuery, BooleanClause.Occur.SHOULD);

Query queryThatShouldBeExecuted.Add(searchQuery, BooleanClause.Occur.MUST);

Java http://www.javadocexamples.com/java_source/org/apache/lucene/search/TestBooleanMinShouldMatch.java.htmlの例へのリンクは次のとおりです。

于 2013-03-05T08:50:34.287 に答える