当前位置: 首页 > 面试题库 >

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

狄冥夜
2023-03-14
问题内容

我在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

您还可以使用语法在查询条件中选择范围field:[x TO *]。如果您想按日期选择某些广告,则可以使用

ad_date:[20100101 TO 20100201]

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



 类似资料:
  • null 我找不到任何说明这是一个限制的文档,也找不到任何绕过它的方法,因为maxFieldLength在4.0中被删除,并且string字段不支持分析器。 有其他人遇到这个问题或找到了解决办法吗?

  • 我在一个包含3000个文档的核心中有一个Solr索引。 我想基于唯一键PaperID修改整个核心中单个字段的值。 有没有人能为我指点一下...最诚挚的问候

  • 例如,在我们的模式中,我们有: 大约有20个不同的领域。每个字段都复制到索引中: 为自定义域类型提供以下标记器: 更新示例JSON文档(内容为安全性而模糊)“ 字段和内容都是从真实数据中编辑的,但它给出了想法。字段名称和内容都是较长的单词。这是取自SOLR管理搜索界面。

  • 我们在各种搜索应用程序中使用solr索引。在大多数情况下,我们使用它就像您使用管理界面一样。例如: 这个很好用 我的问题是,在一个应用程序中,我们直接对索引使用复杂的lucene查询(不使用solr),在这些查询中,我找不到如何搜索日期字段 在模式中。xml: 看起来solr将日期存储为以毫秒为单位的unix时间,当从索引中提取字段时,它看起来1336867200000 在Lucene中,我尝试了

  • 问题内容: 我一直在尝试确定类中字段的类型。我已经看过所有自省方法,但还没有弄清楚该怎么做。这将用于从Java类生成xml / json。我在这里查看了许多问题,但没有找到我真正需要的东西。 例: 在封送该对象时,我需要知道该字段是类型的对象的列表,因此我可以正确地封送它。 我试过了 但是,这只会告诉我,这是一个,不是的小号 谢谢 问题答案: 看一看从Java Tutorial Trail中获取字

  • 问题内容: 我正在使用Solr进行索引和搜索。现在,我的新的数据被索引上elasticsearch。如何使用来自Elasticsearch的Solr索引进行组合搜索? 由于Solr和elasticsearch都是基于Apache Lucene 构建的,因此必须有一种方法/插件来使用Elasticsearch的Solr索引,对吗? 我的尝试: 我为此找到了一条河,但是elasticsearch从1.