首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >存储和搜索复杂数字数据的方法是什么?

存储和搜索复杂数字数据的方法是什么?
EN

Stack Overflow用户
提问于 2014-03-30 00:50:37
回答 2查看 76关注 0票数 0

我有一些数字数据,必须用以下格式从web前端搜索:

玩具类型:狗

玩具亚型:斑点型

玩具制造商:约翰

颜色:白色

估计点:10个

实际地点:11个

玩具类型:猫

玩具亚型:条纹

玩具制造商:简

颜色:白色

估计条纹数:5

实际条纹:尚未计算

搜索查询可能是"Type:Cat,Stripes:4-6",或者"Type:Dog,Subtype:Spotted",或者"Color:White,Maker:John“。

我不确定数据是否最适合关系数据库,因为有几种类型和子类型,每种类型都有自己的属性。最重要的是,每个属性都有估计值和实际值。

我想要一些关于如何存储和搜索这些数据的建议。请帮帮我!

编辑:我更改了搜索查询,使它们不再是自由格式的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-30 11:34:03

我建议使用阿帕奇索尔来索引和搜索数据。

如何使用Solr取决于您的需求。我使用它作为数据的可搜索缓存。当原始主数据必须作为文件保存时非常有用。很多框架都将Solr作为搜索后端进行集成。

要构建Solr索引的前端,请签出solr-ajax

示例

安装Solr

下载索尔发行版:

代码语言:javascript
运行
复制
wget http://www.apache.org/dist/lucene/solr/4.7.0/solr-4.7.0.tgz
tar zxvf solr-4.7.0.tgz

使用嵌入式Jetty容器启动Solr:

代码语言:javascript
运行
复制
cd solr-4.7.0/example
java -jar start.jar

Solr现在应该在本地运行。

代码语言:javascript
运行
复制
http://localhost:8983/solr

data.xml

您没有指定数据格式,所以我使用了Solr支持的本机XML:

代码语言:javascript
运行
复制
<add>
  <doc>
    <field name="id">1</field>
    <field name="toy_type_s">Dog</field>
    <field name="toy_subtype_s">Spotted</field>
    <field name="toy_maker_s">John</field>
    <field name="color_s">White</field>
    <field name="estimated_spots_i">10</field>
    <field name="actual_spots_i">11</field>
  </doc>
  <doc>
    <field name="id">2</field>
    <field name="toy_type_s">Cat</field>
    <field name="toy_subtype_s">Striped</field>
    <field name="toy_maker_s">Jane</field>
    <field name="color_s">White</field>
    <field name="estimated_spots_i">5</field>
  </doc>
</add>

备注:

  • Solr中的每个文档都必须具有唯一的id。
  • 字段名在其名称中有尾随的"_s“和"_i”,以指示字段类型。这是利用Solr的动态场特性的一种欺骗。

索引XML文件

有很多方法可以将数据输入Solr。最简单的方法是curl命令:

代码语言:javascript
运行
复制
curl http://localhost:8983/solr/update?commit=true -H "Content-Type: text/xml" --data-binary @data.xml

值得注意的是,Solr支持其他数据格式,如JSON和CSV。

搜索索引文件

还有支持Solr搜索的语言库,下面的示例使用curl。Solr搜索语法与您所需的路线一致。

下面是一个简单的例子:

代码语言:javascript
运行
复制
$ curl http://localhost:8983/solr/select/?q=toy_type_s:Cat
<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">1</int>
    <lst name="params">
      <str name="q">toy_type_s:Cat</str>
    </lst>
  </lst>
  <result name="response" numFound="1" start="0">
    <doc>
      <str name="id">2</str>
      <str name="toy_type_s">Cat</str>
      <str name="toy_subtype_s">Striped</str>
      <str name="toy_maker_s">Jane</str>
      <str name="color_s">White</str>
      <int name="estimated_spots_i">5</int>
      <long name="_version_">1463999035283079168</long>
    </doc>
  </result>
</response>

一个更复杂的搜索示例:

代码语言:javascript
运行
复制
$ curl "http://localhost:8983/solr/select/?q=toy_type_s:Cat%20AND%20estimated_spots_i:\[2%20TO%206\]" 
<response>
  <lst name="responseHeader">
    <int name="status">0</int>
    <int name="QTime">2</int>
    <lst name="params">
      <str name="q">toy_type_s:Cat AND estimated_spots_i:[2 TO 6]</str>
    </lst>
  </lst>
  <result name="response" numFound="1" start="0">
    <doc>
      <str name="id">2</str>
      <str name="toy_type_s">Cat</str>
      <str name="toy_subtype_s">Striped</str>
      <str name="toy_maker_s">Jane</str>
      <str name="color_s">White</str>
      <int name="estimated_spots_i">5</int>
      <long name="_version_">1463999035283079168</long>
    </doc>
  </result>
</response>
票数 0
EN

Stack Overflow用户

发布于 2014-03-30 01:51:31

你把这个问题的结构安排得很难解决。您的数据是带有特定列的结构化数据。然而,您正在尝试使用免费形式的查询来搜索它。

所以,正常的方法是允许搜索每个字段。

下一种处理方法是全文问题。这肯定有它的问题。例如,数字通常是停止词。不同领域的价值观会相互混淆。

当然,您可以尝试对结构化数据进行免费表单搜索。毕竟,这是谷歌和微软正在做的事情。如果你在谷歌上搜索“从纽约到伦敦的机票”,你就会得到航班列表。但是,通过理解查询,这是一个很难解决的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22738933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档