2017-11-02 1 views
0

私はsearchkitを使って基本的なテキスト検索を構築しようとしています。私が構築したいクエリはかなり簡単だと思います。これは、このような構造にする必要があります:私は、私はそれがBoolMustではなくBoolShouldを使用したこと以外は何を望むかに私にかなり近い何かを与えたprefixQueryFields属性を、使用してみました、それに加えて、常に含めた検索キットでSearchBoxを使用して複合クエリを作成するにはどうすればよいですか?

{ 
    "query":{ 
    "bool":{ 
     "must":[ 
     { 
      "multi_match":{ 
      "query":"test search", 
      "type":"phrase_prefix", 
      "fields":[ 
       "field_1^5", 
       "field_2^4", 
       "field_3" 
      ] 
      } 
     }, 
     { 
      "term": 
      { 
      "field_id": "3" 
      } 
     } 
     ], 
     "must_not":[ 
     { 
      "term": 
      { 
      "status": "archived" 
      } 
     } 
     ] 
    } 
    }, 
    "size":6, 
    "highlight":{ 
    "fields":{ 
     "field_1":{}, 
     "field_2":{}, 
     "field_3":{} 
    } 
    } 
} 

デフォルトのSimpleQueryStringクエリ私は簡単にそこに問題を把握し、SearchBoxqueryBuilder属性と一緒に行くことにしましたができませんでした

const prefixQueryFields = [ 
    'field_1^5', 
    'field_2^4', 
    'field_3', 
]; 

... 

<SearchBox 
    searchOnChange={true} 
    prefixQueryFields={prefixQueryFields} 
/> 

:それはこのような何かを見ました。これは私が思い付いたものです:

_queryBuilder(queryString) { 
    const prefixQueryFields = [ 
    'field_1^5', 
    'field_2^4', 
    'field_3', 
    ]; 
    return new ImmutableQuery() 
    .addQuery(BoolMust([ 
     MultiMatchQuery(queryString, { 
     type: 'phase_prefix', 
     fields: prefixQueryFields, 
     }) 
    ])) 
    .addQuery(BoolMustNot([ 
     TermQuery('status', 'archived'), 
    ])); 
} 

... 

<SearchBox 
    searchOnChange={true} 
    queryBuilder={this.queryBuilder} 
/> 

このクエリはめちゃめちゃさらに出てきた、と私はどのようなドキュメントやソースコードをザッを見て確認した後、次の試行する見当がつかない。

(簡潔にするために、私は間違ったクエリを含む誰かが情報が有用であろうと考えない限り、作成されたこれらの二つの試みを気にしないだろう。)

答えて

0

はそれを考え出しました。 QueryDSL構造体の使用はうまくいきませんでしたが、明らかに純粋なJSONでクエリを作成することができました。基本的には、クエリビルダを次のように変更しました。

return { 
    bool: { 
    must: [ 
     { 
     multi_match:{ 
      query: queryString, 
      type: 'phrase_prefix', 
      fields: prefixQueryFields, 
     } 
     } 
    ], 
    must_not: [ 
     { 
     term: { 
      status: 'archived', 
     } 
     } 
    ] 
    } 
}; 
関連する問題