我有一些数字数据,必须用以下格式从web前端搜索:
玩具类型:狗
玩具亚型:斑点型
玩具制造商:约翰
颜色:白色
估计点:10个
实际地点:11个
玩具类型:猫
玩具亚型:条纹
玩具制造商:简
颜色:白色
估计条纹数:5
实际条纹:尚未计算
搜索查询可能是"Type:Cat,Stripes:4-6",或者"Type:Dog,Subtype:Spotted",或者"Color:White,Maker:John“。
我不确定数据是否最适合关系数据库,因为有几种类型和子类型,每种类型都有自己的属性。最重要的是,每个属性都有估计值和实际值。
我想要一些关于如何存储和搜索这些数据的建议。请帮帮我!
编辑:我更改了搜索查询,使它们不再是自由格式的。
发布于 2014-03-30 11:34:03
我建议使用阿帕奇索尔来索引和搜索数据。
如何使用Solr取决于您的需求。我使用它作为数据的可搜索缓存。当原始主数据必须作为文件保存时非常有用。很多框架都将Solr作为搜索后端进行集成。
要构建Solr索引的前端,请签出solr-ajax。
示例
安装Solr
下载索尔发行版:
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:
cd solr-4.7.0/example
java -jar start.jar
Solr现在应该在本地运行。
http://localhost:8983/solr
data.xml
您没有指定数据格式,所以我使用了Solr支持的本机XML:
<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>
备注:
索引XML文件
有很多方法可以将数据输入Solr。最简单的方法是curl命令:
curl http://localhost:8983/solr/update?commit=true -H "Content-Type: text/xml" --data-binary @data.xml
值得注意的是,Solr支持其他数据格式,如JSON和CSV。
搜索索引文件
还有支持Solr搜索的语言库,下面的示例使用curl。Solr搜索语法与您所需的路线一致。
下面是一个简单的例子:
$ 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>
一个更复杂的搜索示例:
$ 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>
发布于 2014-03-30 01:51:31
你把这个问题的结构安排得很难解决。您的数据是带有特定列的结构化数据。然而,您正在尝试使用免费形式的查询来搜索它。
所以,正常的方法是允许搜索每个字段。
下一种处理方法是全文问题。这肯定有它的问题。例如,数字通常是停止词。不同领域的价值观会相互混淆。
当然,您可以尝试对结构化数据进行免费表单搜索。毕竟,这是谷歌和微软正在做的事情。如果你在谷歌上搜索“从纽约到伦敦的机票”,你就会得到航班列表。但是,通过理解查询,这是一个很难解决的问题。
https://stackoverflow.com/questions/22738933
复制相似问题