0

私はMySqlの出身です。だから、私はelasticsearchについてよく知らないし、働いている。全文検索と用語集Elasticsearchと同じフィールドで検索する

は、ここに私の要件

すべての列にオプションをソートしたレコードのテーブルがありますです。複数の列に対して複数の値を選択するフィルタオプションがあります(たとえば、CityはCity1、City2、City3、CategoryはCat2、Cat22、Cat6である必要があります)。ユーザーがテキストを入力する検索バーもあり、一部のフィールド(都市​​、エリアなど)でフルテキスト検索が適用されます。

enter image description here

この画像は、より良い理解を得られます。

ここで問題に直面しているのは全文検索です。私はいくつかのマッピングを試みましたが、フルテキスト検索またはタームサーチのいずれかで妥協する必要があるたびに試しました。だから私は同じ分野で両方の検索を適用する方法はないと思う。しかし私が言ったように、私はelasticsearchについて多くを知りません。だから解決策があれば、それは分かります。

ここではソートと用語検索を有効にしていますが、全文検索は機能していません。

{ 
    "mappings":{ 
     "my_type":{ 
      "properties":{ 
       "city":{ 
        "type":"string", 
        "index":"not_analyzed" 
       }, 
       "category":{ 
        "type":"string", 
        "index":"not_analyzed" 
       }, 
       "area":{ 
        "type":"string", 
        "index":"not_analyzed" 
       }, 
       "zip":{ 
        "type":"string", 
        "index":"not_analyzed" 
       }, 
       "state":{ 
        "type":"string", 
        "index":"not_analyzed" 
       } 
      } 
     } 
    } 
} 

答えて

0

あなたは、2つのマッピングのフルテキストおよび他の用語の検索のための1とmultifieldsでマッピングを更新することができます。ここに都市のサンプルマッピングがあります。

{ 
    "city": { 
     "type": "string", 
     "index": "not_analyzed", 
     "fields": { 
      "fulltext": { 
       "type": "string" 
      } 
     } 
    } 
} 

デフォルトのマッピングは用語検索のためのものです。したがって、用語検索が必要な場合は、「都市」フィールドで簡単にクエリできます。しかし、フルテキスト検索が必要な場合は、 "city.fulltext"でクエリを実行する必要があります。お役に立てれば。

+0

フルテキスト検索とターム検索の両方を個別または複合検索するための構造クエリを利用できますか? –

0

not_analyzedではフルテキスト検索が機能しません。フィールドとソートはanalyzedフィールドでは機能しません。

multi-fieldsを使用する必要があります。

さまざまな目的で異なる方法で同じフィールドにインデックスを付けると便利なことがよくあります。これはマルチフィールドの目的です。例えば、文字列フィールドは、フルテキスト検索のためのテキストフィールドとしてマッピングされ、ソートや集計のキーワードフィールドとすることができる:

例えば:

{ 
    "mappings": { 
    "my_type": { 
     "properties": { 
     "city": { 
      "type": "text", 
      "fields": { 
      "raw": { 
       "type": "keyword" 
      } 
      } 
     } ... 
     } 
    } 
    } 
} 

は、ドット表記法を使用しソートby city.raw

{ 
    "query": { 
    "match": { 
     "city": "york" 
    } 
    }, 
    "sort": { 
    "city.raw": "asc" 
    } 
}