💬
Solrで配列型のフィールドに1つの値だけを持つデータを抽出する
Solrで配列型のフィールドに1つの値だけを持つデータを抽出する方法になります。
ただし前提は配列型のフィールドが数値型の場合のみを今回は想定しています。
文字列型の方法は分かっていないためご存知の方は教えてください。
具体的な抽出について
以下のデータがSolrに登録されている前提です。
この時numbersフィールドは配列型になっています。
name | numbers |
---|---|
taro | 1,2 |
hanako | 1,4 |
ichiro | 1 |
shohei | 2,3,4 |
saori | 2 |
このような状況で、numbersに2の値のみもつデータを抽出したい場合の方法が今回の記事の内容になります。
具体的には{"name": "saori", "numbers": ["2"]}
のデータのみを取得したいです。
抽出方法
まずは全データを確認します。
$ curl 'http://localhost:8983/solr/my_core/query?q=*:*'
{
"responseHeader":{
"status":0,
"QTime":0,
"params":{
"q":"*:*"}},
"response":{"numFound":5,"start":0,"numFoundExact":true,"docs":[
{
"name":"taro",
"numbers":["1","2"],
"id":"122f67a2-fc07-4ebe-800e-57f7c6d8c192",
"_version_":1711308323262824448},
{
"name":"hanako",
"numbers":["1","4"],
"id":"8a7f39c7-bb67-403c-99be-f9d559de91f3",
"_version_":1711308323265970176},
{
"name":"ichiro",
"numbers":["1"],
"id":"ddafb03c-7b62-4d3f-a28a-c6473cc7f013",
"_version_":1711308323267018752},
{
"name":"shohei",
"numbers":["2","3","4"],
"id":"7afe643f-bf90-4d71-bebf-e8a203de465f",
"_version_":1711308323269115904},
{
"name":"saori",
"numbers":["2"],
"id":"e65b9dc7-ad7c-49f0-9e37-1d08023a8fe4",
"_version_":1711308323270164480}]
}}
抽出してみる
$ curl -g 'http://localhost:8983/solr/my_core/query?q=numbers:2+AND+NOT+numbers:{2+TO+*}+AND+NOT+numbers:{*+TO+2}'
{
"responseHeader":{
"status":0,
"QTime":0,
"params":{
"q":"numbers:2 AND NOT numbers:{2 TO *} AND NOT numbers:{* TO 2}"}},
"response":{"numFound":1,"start":0,"numFoundExact":true,"docs":[
{
"name":"saori",
"numbers":["2"],
"id":"e65b9dc7-ad7c-49f0-9e37-1d08023a8fe4",
"_version_":1711308323270164480}]
}}
はい。取得できました!
結論
以下のように Xに取得したい値を入力してあげれば該当の値のみを持つデータ取得可能となります。
q=numbers:X+AND+NOT+numbers:{X+TO+*}+AND+NOT+numbers:{*+TO+X}'
Discussion