如何将Solr中的精确搜索与空间匹配

g9icjywg  于 2022-09-27  发布在  Solr
关注(0)|答案(2)|浏览(193)

当两个单词之间存在空格时,如何搜索单词的一部分。我的查询如下

/select?q=*:*&fq=pageType:program&fl=programLocation&rows=100&fq=programLocation:"Mohali"

我得到的结果如下

"response":{"numFound":3,"start":0,"docs":[
      {
        "programLocation":["Mohali"]},
      {
        "programLocation":["Mohali"]},
      {
        "programLocation":["Mohali and Hyderabad"]}]

我只想取回“莫哈利”,但现在我得到了“莫哈里”和“莫哈利海得拉巴”。如何形成一个只获取莫哈利的查询?

pu3pd22g

pu3pd22g1#

您需要将string用作字段programLocationfieldtype
将字符串应用为fieldtype,然后重新索引数据。

<field name="programLocation" type="string" indexed="true" stored="true" required="true" multiValued="false" />

String将单词/句子存储为精确的字符串,而不执行任何标记化。它在存储精确匹配的情况下非常有用,例如,刻面、排序。
string类型的反义词是textText对数据进行标记化,执行诸如小写等处理。当我们想匹配句子的一部分时,它很有用。
如果要实现小写搜索,请为您的字段使用以下字段类型。

<fieldType name="forExactMatch" class="solr.TextField" sortMissingLast="true" omitNorms="true">
      <analyzer>
        <!-- KeywordTokenizer does no actual tokenizing, so the entire
             input string is preserved as a single token
          -->
        <tokenizer class="solr.KeywordTokenizerFactory"/>
        <!-- The LowerCase TokenFilter does what you expect, which can be
             when you want your sorting to be case insensitive
          -->
        <filter class="solr.LowerCaseFilterFactory" />
      </analyzer>
    </fieldType>

如果有空格,也可以在小写过滤器工厂之后使用下面的过滤器。

<filter class="solr.TrimFilterFactory" />

然后您的字段定义如下所示

<field name="programLocation" type="forExactMatch" indexed="true" stored="true"/>
bxfogqkk

bxfogqkk2#

与java中的lucene搜索完全匹配
?q="Your search"~0
您可以使用整数来定义单词之间的最大距离
?q="Your search"~2
示例:“这是一个令人敬畏的精确匹配示例”

  • ?q="awesome exemple"~0将匹配
  • ?q="awesome exact match"~0不匹配
  • ?q="awesome exact match"~2将匹配

相关问题