0

私のアプリでは、懐中電灯の検索エンジンを使用します。エラスティック テーブルには、2 つのフィールドを持つデータを格納しますid: { name: "", uid: "" }。特定の値を取得したい場合、名前フィールドでのみ部分一致を実行し、一致が機能する場合は 2 つのフィールドすべてを取得します。私のリクエストデータでは、通常、この構造を保存します

search : {
  request: {
    -54shdjwirjghcb7364gf92jcns20ahd: {
        index: "firebase",
        type: "event",
        from: 0,
        size: 50,
        query: "*fra*"
    }
  }
}

結果は肯定的ですが、この場合、すべてのフィールドで部分一致を懐中電灯で検索します。これは、部分的な uid または部分的な名前と一致する場合、結果は常に肯定的であるためです (文字列が一致する場合)。

1 つのフィールドだけを部分的に一致させるにはどうすればよいですか?

私のサーバー側の検索キューはこれです

_process: function (snap) {
        var dat = snap.val();
        var key = snap.key;

        if (this._assertValidSearch(key, dat)) {
            // Perform (a very simple) ElasticSearch query
            this.esc.search({
                index: dat.index,
                type: dat.type,
                from : dat.query.from,
                size : dat.query.size,
                q: dat.query
            }, function (error, response) {
                if (error) {
                    this._reply(key, { error: error, total: 0 });
                } else {
                    this._reply(key, response);
                }
            }.bind(this));
        }
    },

前もって感謝します

4

1 に答える 1

0

"name:*fra*"クエリとして使用してみてください。query プロパティは、q パラメータとして elasticsearch に渡されます。

ここをチェック: https://www.elastic.co/guide/en/elasticsearch/reference/5.0/search-search.html

于 2016-10-28T16:28:59.703 に答える