【发布时间】:2017-02-12 16:44:07
【问题描述】:
提取文件时,solr 将其内容索引到一个名为 _text_ 的包罗万象的字段。即使您通过fmap.content=my_content_field 提供内容字段,情况也是如此。
但是,如果没有声明 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>"
添加一个文档,提取并索引filename.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 "myfile=@${FILENAME}"
查询包含单词ipsum的文档:
curl "${SOLR_URL}/query?q=_text_:ipsum&fl=id"
更新字段field_x的内容:
curl "${SOLR_URL}/update?commit=true" -d '
[
{
"id" : '${FILENAME}',
"field_x" : {"set" : "new_value"}
}
]'
查询包含单词ipsum的文档:
curl "${SOLR_URL}/query?q=_text_:ipsum&fl=id"
更新前后的查询给出的结果是按预期找到的文档:
{
"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 "myfile=@${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":[]
}}
【问题讨论】:
标签: solr