この質問の目標は、フロントエンドでのファセットナビゲーションの実装に関する問題を解決することです。 UIに入力欄があり、ユーザーはすべての項目/すべての指標にわたってあらゆる用語(フルテキスト)を照会することができます。私は、ユーザーが面取りされたナビゲーション(フィルタなど)を使用して結果をペアリングできるようにしたいと思います。ElasticSearch - すべてのフィールドでキーワードを検索し、フィルタを使用して結果をペアにします。
たとえば、ユーザーがキーワード「トムソン」を検索すると、すべてのフィールドを検索する必要があります。次に、ユーザーにフィルタを表す2つ(またはそれ以上)のチェックボックスが表示されます(「地理的位置」と「グループ」とします)。これはANDフィルタでなければなりません。私は無駄に次のElasticSearchクエリを試してみました。
{
"query":{
"bool":{
"must": {
"multi_match": {
"query": "thomson",
"fields": ["*"]
}
},
"should":[
{
"terms":{
"geographicLocation": ["USA", "ENGLAND"]
}
},
{
"terms":{
"Group": ["AA", "BB"]
}
}
]
}
}
}
それでは、私はESの次のドキュメントを持っているとしましょう:
{ name: 'Joe', street: '3 thomson st', geographicLocation: 'USA', Group: 'AA' }
{ name: 'Thomson': street: '1 york ave', geographicLocation: 'CHINA', Group: 'BB' }
{ name: 'Jane', street: '2 jones dr' geographicLocation: 'ENGLAND', Group: 'CC' }
まず、私はどこかの分野で「トムソン」(例えば、最初の二つのドキュメント上で)を持って結果を取得する必要があります。次に、それらは "USA"または "ENGLAND" AND "AA"または "BB"のいずれかのグループである地理的位置によってフィルタリングされるべきです。
したがって、私は地理的位置がUSAまたはENGLANDで、グループAAまたはBBのいずれかにある文書のどこかに「thomson」という書類が必要です。これは私に最初の文書だけを残す。
私は上記のESパラメータを管理するのは不可能です。
編集:ここに私のマッピングです:
{
"person": {
"mappings": {
"TEST": {
"properties": {
"name": {
"type": "text"
},
"street": {
"type": "text"
},
"EndDate": {
"type": "long"
},
"EndDt": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"Group": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"d3232b0e1b28bfb8b432a3459404676d:created_date": {
"type": "date"
},
"d3232b0e1b28bfb8b432a3459404676d:edited": {
"type": "date"
},
"geographicRegion": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
}
}
わかりません1? – Val
私は次のようにクエリを更新し、私にすべてのヒットを与えていないようだ。 { \t "クエリ":{ \t \t "ブール値":{ \t \t \t "必須":[ \t \t \t \t { "multi_match":{ "クエリ": "トムソン"、 "フィールド":[ "*"]}}、 \t \t \t \t { "という用語は":{ "geographicLocation":[ "USA"、「ENGLAND "]}}、 \t \t \t \t { "用語":{ "グループ":[ "AA"、 "BB"]}} \t \t \t] \t \t} \t}} – sags
また、あなたのインデックスのマッピングを共有することはできますか?私はあなたの 'geographicLocation'と' Group'フィールドが解析された文字列であると思われます – Val