[英]Solr: Using wildcard for a term having whitespaces
我正在嘗試搜索一個末尾帶有空格和通配符的術語; 即name:John S*
Solr無法返回任何結果,盡管我為以下條目建立了索引,並在從Solr Web界面查詢*:*
時返回了它們;
我正在使用帶有DIH的Sol7.4和DIH來索引我的數據庫,並且正在為我的Web應用程序創建聯系人搜索(按姓名和電話)功能。
我用空格跟蹤了這個線程Solr通配符查詢,但是並沒有解決問題。
name
)更改為text_en
, text_ws
和當前的text_general
,並且嘗試使用反斜杠“ \\”轉義空格,但它不起作用。 http://localhost:8983/solr/collection/select?q{!complexphrase inOrder=true}displayName:John\\ *
注意:每次嘗試后,我已經重新加載了solr,清除並重新索引了我的數據。
當搜索“ John”時,我應該獲得所有3個條目:
當搜索將被解析為“ John”的“ John \\”時; 我應該得到:
當搜索“ John \\ S *”時,我應該得到:
...
$term = str_replace(' ', '\ ', $request_params['term']);
$query->setQuery('phone:"%1%" OR name:"%1%" OR contact:%2%*', [$request_params['term'], $term]);
// $query->setQuery('phone:"%1%" OR name:"%1%" OR contact:"%2%*"', [$request_params['term'], $term]);
...
...
<fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.KeywordTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
...
<field name="name" type="text_general" multiValued="false" indexed="true" stored="true"/>
<field name="contact" type="lowercase" indexed="true" stored="true"/>
<field name="phone" type="string" docValues="false" multiValued="false" indexed="true" required="true" stored="true"/>
<copyField source="displayName" dest="card"/>
<!-- <copyField source="phone" dest="card"/> -->
...
將通配符匹配的第二個字段用於帶有KeywordTokenizer並附加了LowercaseFilterFactory的通配符匹配。 使用copyField指令將內容從主字段復制到第二個基於通配符的字段中。
這樣,您可以對常規字段執行常規搜索,而對正確支持通配符的字段執行通配符搜索。
上面的第二個示例( John\\ *
)實際上可能只會匹配具有標記John的任何內容(並且在參數名稱q
和參數本身之間缺少a =
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.