我是索爾的新手。我已經嘗試使用Oracle數據庫的DataImport。數據成功導入。當我試着使用查詢來搜索:索爾在數據導入成功後搜索不起作用
QT =標準 Q = *
我取得好成績。但是當我做一個特定的搜索時,結果是空的,顯示沒有文檔。記錄器爲空,並且沒有顯示任何錯誤。
我是索爾的新手。我已經嘗試使用Oracle數據庫的DataImport。數據成功導入。當我試着使用查詢來搜索:索爾在數據導入成功後搜索不起作用
QT =標準 Q = *
我取得好成績。但是當我做一個特定的搜索時,結果是空的,顯示沒有文檔。記錄器爲空,並且沒有顯示任何錯誤。
好的!我知道了。
我觀察到,當我使用schema.xml的一些預定義字段時,對這些字段的搜索工作正常。但是當我定義了我自己的一些領域時,結果仍然沒有。
然後我看着「solr-config.xml」「/ select」請求處理程序。有一條線
<str name="df">text</str>
它說「txt」是唯一可以搜索的字段。但是,它如何搜索其他領域?
答案就在 「schema.xml中的」
"<copyField>"
標籤。默認存在的字段被複制到「文本」中,這使得它們可以搜索。因此,如果您希望您定義的字段爲可搜索的,只需定義您的字段並將其添加到copyField標記中。 ;)
TLDR版本:定義您的字段爲type="text"
開始。如果您有一個名爲「product」的字段,請在<fields>
標記內添加<field name="product" type="text" indexed="true" stored="true" />
到默認的schema.xml
,然後完成。要使用select
請求處理程序進行搜索,請使用q=<field_name>:<text_to_look_for>
或q=*:*
來顯示所有文檔。
你在這裏犯了一些錯誤。我將使用'select'請求處理程序進行解釋。
查詢的格式是?q=<field_name>:<text_to_look_for>
。所以,如果你想返回匹配所有領域的所有值,你會說q=*:*
如果你要查找的「iPod」在現場「產品」您的查詢將q=product:iPod
另外需要注意的是,如果在schema.xml
中,假設指定的字段product
爲type="string"
(其映射到class="solr.StrField"
),則查詢(<text_to_look_for>
)應該與索引中的值精確匹配,因爲默認情況下Solr未標記StrField ,即如果您的索引將其保留爲iPod
,則ipod
將不會返回結果。如果你需要它仍然返回它,你可以在schema.xml
中使用type="text"
(fieldType定義已經存在於默認的schema.xml中。)「text」fieldType有幾個分析器(一個分析器忽略大小寫)和標記器(tokenizer split)並將它們編入索引,以便如果您搜索某個特定的詞,請說出「ipod」,它將匹配值「iPod 16GB White」)。
關於您自己的答案,<str name="df">text</str>
指定了要搜索的默認字段,即,如果您剛纔說的是q=iPod
,它會查找該字段。這個字段稱爲文本的目標是保存文檔中的所有其他字段,以便您可以在此字段中搜索並且知道本文檔中的某些字段與您的查詢匹配,因此您不需要在特定字段中搜索,如果您不知道您期望價值在哪個字段中。
是那些索引並存儲在模式中的特定字段? – MYK
@yasir:是的,它們都被索引和存儲。 –