我应该构建一个搜索引擎,允许任何人输入任何布尔表达式
(word1 + word2) - !word3
- 其中+
表示and
,-
表示or
,!
表示not
。
然后在数据库中搜索这些单词并返回实现表达式的文档。
所以我用这样的词典:
Dictionary<string, List<int>> WordsAndDoc = new Dictionary<string, List<int>>();
我搜索了数据库中的每个单词,然后在字典中添加了文档ID列表 我宣布了两种方法 首先合并两个List:
public List<int> Intersect(List<int> P1, List<int> P2)
第二次加入两个名单:
public List<int> Union(List<int> P1, List<int> P2)
问题是:如何解析TextBox中的布尔表达式,如果有+
则合并两个单词列表。如果有-
则联合两个列表
最终产生一份所需文件的清单ID ...
请帮帮我,谢谢你。
答案 0 :(得分:0)
答案 1 :(得分:0)
我不完全确定我理解这个问题,但是这对数据库查询来说不是更容易吗?例如将他们输入的文本转换为:
(word1 + word2) - !word3
SELECT id FROM table WHERE (field like '% word1 %' and field like '% word2 %')
and not (field like '% word3 %')
有许多其他方法可以进行查询,例如如果你有全文或其他什么,取决于数据库,但这看起来更像是通过构建正确的查询而不是在事后处理它来做得最好的事情。