簡體   English   中英

Solr:對具有空格的術語使用通配符

[英]Solr: Using wildcard for a term having whitespaces

我正在嘗試搜索一個末尾帶有空格和通配符的術語; name:John S* Solr無法返回任何結果,盡管我為以下條目建立了索引,並在從Solr Web界面查詢*:*時返回了它們;

  • 約翰·道
  • 約翰尼·英語
  • 約翰·史密斯

我正在使用帶有DIH的Sol7.4和DIH來索引我的數據庫,並且正在為我的Web應用程序創建聯系人搜索(按姓名和電話)功能。

用空格跟蹤了這個線程Solr通配符查詢,但是並沒有解決問題。

  1. 我嘗試將我的字段類型(用於字段name )更改為text_entext_ws和當前的text_general ,並且嘗試使用反斜杠“ \\”轉義空格,但它不起作用。
  2. 嘗試Solr的“ 復雜詞組查詢分析器 ”,這部分地解決了這個問題,因為它會極度增加查詢時間,此外, 日光浴是,如果長期在末端包含即空間拋出的異常“JHON \\ *”,如果我嘗試從Solr Web界面運行相同的查詢,但沒有結果http://localhost:8983/solr/collection/select?q{!complexphrase inOrder=true}displayName:John\\ *
  3. 另外,沒有運氣嘗試了前綴查詢解析器

注意:每次嘗試后,我已經重新加載了solr,清除並重新索引了我的數據。

預期結果:

  • 當搜索“ John”時,我應該獲得所有3個條目:

    • 約翰·道
    • 約翰尼·英語
    • 約翰·史密斯
  • 當搜索將被解析為“ John”的“ John \\”時; 我應該得到:

    • 約翰·道
    • 約翰·史密斯
  • 當搜索“ John \\ S *”時,我應該得到:

    • 約翰·史密斯

更新#1

search.php

...
    $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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM