搜索用户查询预处理以在solr

时间:2015-10-29 06:19:03

标签: django search solr lucene search-engine

我是solr和django的新手,我正致力于在宴会厅场地搜索网站上进行搜索,虽然我没有在网站上工作部分只是为了搜索索引solr我在索引中索引了政党场地信息字段

<field name="id" type="int" indexed="true" stored="true" required="true" multiValued="false" />
<field name="title" type="text_general" indexed="true" stored="true" required="true" />
<field name="slug" type="text_general" indexed="true" stored="true" required="true" />
<field name="description" type="text_general" indexed="true" stored="true"/>
<field name="location" type="text_general" indexed="true" stored="true"/>
<field name="city" type="text_general" indexed="true" stored="true"/>
<field name="area" type="text_general" indexed="true" stored="true"/>
<field name="featured" type="boolean" indexed="true" stored="true" />
<field name="facilities" type="text_general" indexed="true" stored="true" multiValued="true" />
<field name="type_of_venue" type="text_general" indexed="true" stored="true" multiValued="true" />...

还有许多其他字段仅用于在结果页面上显示数据,但只有这些字段用于查询数据

在我的网站上我有一个搜索栏,用户可以在其中输入任何搜索词,然后根据标题,描述,位置,设施进行搜索

现在我已经做了足够的阅读,如何分解用户输入的搜索条件,以确定要在哪个字段中找到它,以便我可以使用不同的模板视图来显示找到的匹配但是无法找到任何技术将与solr合作。

请有人建议我使用任何预搜索文本处理技术,以便更简单地生成查询以在solr中搜索

提前致谢

1 个答案:

答案 0 :(得分:0)

如果您仔细索引数据(请参阅示例),有一种简单(但不是最好!)的方法。

让我们说这是你的政党大厅文件

1) party hall - "abc party hall", location - "san jose"
2) party hall - "xyz party hall", location - "san francisco"
3) party hall - "pqr party hall", location - "paris"
4) party hall - "best party hall", location - "san jose"

让我们说你的用户在搜索栏中键入“圣何塞最好的派对大厅”,理想情况下你应该返回#4,1,对吗?

您当然可以预处理您的查询(复杂NLP),以提取您的查询中用于位置字段的潜在位置数据。

暂时让我们采用强力方法,让我们使用布尔查询并按原样搜索所有重要字段的完整查询

party_hall: "best party hall in san jose" AND location: "best party hall in san jose"

如果您已正确索引数据(如上面的示例文档中所示),您将获得预期的最佳结果。

派对大厅查询不会有“圣何塞”所以它会考虑带有“最佳派对大厅”的文件,类似的位置栏会用“圣何塞”过滤文件,所以从技术上来说你应该得到最好的匹配文件#4,1。您可以使用“OR”而不是“AND”,但是您将获得更多匹配的文档(但排名排序仍然是准确的和预期的)

尝试使用您的用例,看看它是否有帮助!

p.s - 如果您使用任何基于标记器的分析器(如StandardAnalyzer)(对于KeywordAnalyzer不起作用),这将起作用