ファイルを抽出するときに、solrはそのコンテンツを_text_
というキャッチオールフィールドにインデックスします。コンテンツフィールドにfmap.content=my_content_field
を指定しても、このような場合があります。solrは "catch-all"フィールド_text_でどのように動作していますか?
フィールドが宣言されたfmap.content
がない場合、フィールド_text_
は更新時に上書きされているようです。 fmap.content
が宣言された場合、フィールド_text_
は明らかに変更されません。
この現象を再現するには、次の
SOLR_CORE=test
SOLR_URL=http://192.168.45.153:8983/solr/${SOLR_CORE}
FILENAME=textfile.txt
cat > ${FILENAME} << EOF
Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,
sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.
Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
EOF
curl "${SOLR_URL}/update?commit=true&stream.body=<delete><query>*:*</query></delete>"
は、ファイル名.txtの内容の文書、抽出およびインデックスを追加コア内のすべての文書を削除します。
curl "${SOLR_URL}/update/extract?\
literal.id=${FILENAME}\
&fmap.content=my_content_field\
&literal.field_x=initial_text_of_field_x\
&literal.field_y=initial_text_of_field_y\
&commit=true"\
-F "[email protected]${FILENAME}"
ipsum
という語を含む文書を照会します。
curl "${SOLR_URL}/query?q=_text_:ipsum&fl=id"
更新フィールドfield_x
の内容:
curl "${SOLR_URL}/query?q=_text_:ipsum&fl=id"
クエリの前に、予想されるとして発見文書で結果を与える更新した後:単語ipsum
を含むドキュメントのクエリー
curl "${SOLR_URL}/update?commit=true" -d '
[
{
"id" : '${FILENAME}',
"field_x" : {"set" : "new_value"}
}
]'
:
{
"responseHeader":{
"status":0,
"QTime":0,
"params":{
"q":"_text_:ipsum",
"fl":"id"}},
"response":{"numFound":1,"start":0,"docs":[
{
"id":"textfile.txt"}]
}}
文書が&fmap.content=my_content_field
ずに追加された場合:(上記参照)を更新した後
curl "${SOLR_URL}/update/extract?\
literal.id=${FILENAME}\
&literal.field_x=initial_text_of_field_x\
&literal.field_y=initial_text_of_field_y\
&commit=true"\
-F "[email protected]${FILENAME}"
クエリには書類が見つからない:
curl "${SOLR_URL}/query?q=_text_:ipsum&fl=id"
{
"responseHeader":{
"status":0,
"QTime":1,
"params":{
"q":"_text_:ipsum",
"fl":"id"}},
"response":{"numFound":0,"start":0,"docs":[]
}}