如何确定SOLR索引的字段类型?

2022-08-31 00:47:55

我在MySQL表中有两个表字段。一个是VARCHAR,是分类(分类网站)的“标题”。另一个是文本字段,其中包含分类的“文本”。

两个问题:
我应该如何确定如何索引这两个字段?(什么字段类型,使用什么类等)

目前,我有一个“ad_id”作为每个广告的唯一标识符,例如“bmw_m3_82398292”。
每当SOLR找到“查询匹配”时,如何让SOLR返回此标识符?(标识符的第一部分实际上是标题字段内容,第二部分是选择的随机数)

谢谢


答案 1

1. 架构

您的Solr架构很大程度上取决于您预期的搜索行为。在架构.xml文件中,您将看到一堆选项,如“文本”和“字符串”。他们的行为不同。

<fieldtype name="string" class="solr.StrField" sortMissingLast="true"     omitNorms="true"/>

字符串字段类型是文本字符串匹配。它的操作方式与 SQL 语句类似。==

<fieldtype name="text_ws"   class="solr.TextField"          positionIncrementGap="100">
  <analyzer>
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
  </analyzer>
</fieldtype>

text_ws字段类型执行标记化。但是,该领域的一大区别是非索引字和分隔符以及下写大小的筛选器。请注意这些筛选器是如何为 Lucene 索引和 Solr 查询指定的。因此,在搜索文本字段时,它将使用这些筛选器调整查询词,以帮助查找匹配项。text

<fieldtype name="text"      class="solr.TextField"  positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory"/>
    <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/>
    <filter ..... />
    <filter ..... />
    <filter ..... />
  </analyzer>
</fieldtype>

例如,在为新闻报道等内容编制索引时,您可能希望以不同的方式搜索公司名称和标题。

<field name="headline" type="text" />
<field name="coname" type="string" indexed="true" multiValued="false" omitNorms="true" />

上面的示例将允许您执行类似搜索并检索恰好命中英特尔故事的匹配项。&coname:Intel&headline:processor+specifications

如果要搜索范围

2. 结果字段

您可以在请求处理程序中定义一组标准的返回字段

<requestHandler name="mumble" class="solr.DisMaxRequestHandler" >
    <str name="fl">
        category,coname,headline
    </str>
</requestHandler>

您还可以使用以下参数在查询字符串中定义所需的字段:fl

/select?indent=on&version=2.2&q=coname%3AIn*&start=0&rows=10&fl=coname%2Cid&qt=standard

您还可以使用语法选择查询词中的范围。如果您想按日期选择某些广告,则可以使用以下方式构建查询field:[x TO *]

ad_date:[20100101 TO 20100201]

在查询词中。(有很多方法可以搜索范围,我提出了一个使用整数而不是Date类的方法。


答案 2

推荐