我应该在Solr(或任何数据库)中索引或存储这些字段吗?

时间:2010-01-26 18:00:32

标签: java php sql mysql database

背景:
我有一个cclassifieds网站,用户可以搜索汽车,并指定价格范围,里程,燃料类型,变速箱和手动输入的查询字符串,如果他们想在搜索中添加特定内容,例如“bmw m3”。

问题:
我将把这些信息移到Solr以便更快地查找,并想知道我是否必须索引或存储字段。

用户可以搜索的唯一字段实际上是分类的“标题”和“描述”。但是,如上所述,它们可以指定价格范围,例如。

所以我猜“标题”和“描述”字段应该被编入索引吗? 但是,价格字段和任何其他子选项字段是否也应编入索引?

在MySQL查询中,查询语法会是这样的,所以你可以比较我所说的:(可能包含错误,忘记它们究竟是在哪里写的)

  $query="SELECT * FROM cars_category WHERE headline='bmw m3' OR description='bmw m3' AND price BETWEEN 10000 AND 500000 AND fuel='petrol' AND etc etc";

那么您如何看待,索引/存储所有字段或什么?

是否有一种方法可以确定要存储的内容和索引内容,或两者兼而有之?

由于

PS:赞赏描述性答案

3 个答案:

答案 0 :(得分:1)

我同意:您要搜索或排序的任何内容都应编入索引。

然而,搜索和排序通常在具有不同值的字段(即Make字段,包含“Acura”,“BMW”,“Chevy”等)上更好地工作,而不是像描述那样的大型自由文本字段。您可以考虑更好的搜索结果和更好的性能。

在您的情况下,我建议索引价格,燃料,标题以及您正在搜索的任何其他不同字段。

描述上的索引仅在搜索Description =“BMW M3”时有用。然而,搜索逻辑将省略诸如“红色宝马M3与倍耐力轮胎”之类的结果。搜索描述LIKE“%BMW M3%”无论如何都必须扫描整个表格,因此索引不会非常有用。

答案 1 :(得分:0)

  

并想知道我是否必须索引或存储   田野。

我对Solr的理解非常有限,但是当我开始时让我困惑的是索引术语:在数据库中,存储数据和创建/存储索引是两个独立的事情,并且(一般来说,至少)数据是存储在两个不同的位置,但在Solr中,您上传到Solr的任何 已编入索引。因此,您决定希望Solr能够搜索哪些字段,并指定字段类型,并且 - 嘿presto - Solr可以以令人印象深刻的速度在这些字段中查找数据。您可以确定搜索不同字段的方式(例如,区分大小写),您可以确定范围搜索等:查看此处的wiki http://wiki.apache.org/solr/FrontPage#Search_and_Indexing和查询语法http://wiki.apache.org/solr/SolrQuerySyntax以进行综合处理这些

答案 2 :(得分:-1)

索引除描述之外的任何内容。使用“LIKE'%xxx%”对字段进行查询时,大多数数据库都不使用索引。