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

标签 java php sql mysql solr

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

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

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

谢谢

最佳答案

1。架构

您的 Solr 架构在很大程度上取决于您预期的搜索行为。在您的 schema.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 字段类型进行分词。但是,text 字段中的一个很大区别是停用词、定界符和小写字母的过滤器。请注意如何为 Lucene 索引和 Solr 查询指定这些过滤器。因此,在搜索文本字段时,它将使用这些过滤器调整查询词以帮助找到匹配项。

<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 的搜索,并检索完全匹配 Intel 故事的匹配项。

如果你想搜索一个范围

2。结果字段

您可以在 RequestHandler 中定义一组标准的返回字段

<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

您也可以select ranges在您的查询词中使用 field:[x TO *] 语法。如果您想按日期选择某些广告,您可以构建一个查询

ad_date:[20100101 TO 20100201]

在您的查询条件中。 (有很多方法可以搜索范围,我将介绍一种使用整数而不是 Date 类的方法。)

关于java - 如何确定 SOLR 索引的字段类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2118634/

相关文章:

java - 设计帮助!枚举工厂变压器中的java泛型!

java - 将@TestTemplate 与@ParameterizedTest 结合起来?

php - ffmpeg后台进程完成后如何管道新命令?

mysql - 如何查询这个..(对字段进行排序,并将具有空值的行放在最后)

sql - 如何更改 derby 数据库的列数据类型?

sql - 重写这个子查询?

java - jsoup 没有得到完整的数据

java - XMLEvent.writeAsEncodedUnicode

php - 在 PHP 中是否有比这更好/替代的方法将变量传递到页面?

php - 使用 Ajax 时如何访问当前 PHP 文件之外的 PHP 函数?