schema của tôi:Solr: tìm kiếm với kết hợp khác nhau của không gian, dấu nối, vỏ và punctuations
<fieldType name="text" class="solr.TextField" positionIncrementGap="100">
<analyzer>
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.StopFilterFactory"
ignoreCase="true"
words="stopwords.txt"
enablePositionIncrements="true"
/>
<filter class="solr.WordDelimiterFilterFactory"
generateWordParts="1" generateNumberParts="1"
catenateWords="1" catenateNumbers="1" catenateAll="0"
splitOnCaseChange="1" splitOnNumerics="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
<filter class="solr.SnowballPorterFilterFactory" language="English"
protected="protwords.txt"/>
</analyzer>
</fieldType>
kết hợp mà tôi muốn làm việc:
"Walmart", "WalMart", "Wal Mart "," Wal-Mart "," Wal-mart "
Cho bất kỳ chuỗi nào trong số này, tôi muốn tìm một chuỗi khác.
Vì vậy, có 25 tổ hợp như đưa ra dưới đây:
(cột đầu tiên biểu thị văn bản đầu vào cho tìm kiếm, phù hợp với cột thứ hai biểu thị dự kiến)
(Walmart,Walmart)
(Walmart,WalMart)
(Walmart,Wal Mart)
(Walmart,Wal-Mart)
(Walmart,Wal-mart)
(WalMart,Walmart)
(WalMart,WalMart)
(WalMart,Wal Mart)
(WalMart,Wal-Mart)
(WalMart,Wal-mart)
(Wal Mart,Walmart)
(Wal Mart,WalMart)
(Wal Mart,Wal Mart)
(Wal Mart,Wal-Mart)
(Wal Mart,Wal-mart)
(Wal-Mart,Walmart)
(Wal-Mart,WalMart)
(Wal-Mart,Wal Mart)
(Wal-Mart,Wal-Mart)
(Wal-Mart,Wal-mart)
(Wal-mart,Walmart)
(Wal-mart,WalMart)
(Wal-mart,Wal Mart)
(Wal-mart,Wal-Mart)
(Wal-mart,Wal-mart)
hạn chế hiện tại với schema của tôi:
1. "Wal-Mart" -> "Walmart",
2. "Wal Mart" -> "Walmart",
3. "Walmart" -> "Wal Mart",
4. "Wal-mart" -> "Walmart",
5. "WalMart" -> "Walmart"
Ảnh chụp màn hình của máy phân tích:
tôi đã cố gắng kết hợp khác nhau của các bộ lọc cố gắng giải quyết những hạn chế, vì vậy tôi đã vấp bởi các giải pháp cung cấp tại địa chỉ: Solr - case-insensitive search do not work
Trong khi nó có vẻ vượt qua một trong những hạn chế mà tôi có (xem # 5 WalMart - > Walmart), nó là tổng thể tồi tệ hơn những gì tôi đã có trước đó. Bây giờ nó không hoạt động đối với trường hợp như:
(Wal Mart,WalMart),
(Wal-Mart,WalMart),
(Wal-mart,WalMart),
(WalMart,Wal Mart)
besides cases 1 to 4 as mentioned above
Analyzer sau khi thay đổi schema:
Câu hỏi:
Tại sao "WalMart" không phù hợp "Walmart" với schema ban đầu của tôi ? Máy phân tích Solr cho thấy rõ ràng rằng nó đã tạo ra 3 thẻ trong thời gian chỉ mục:
wal
,mart
,walmart
. Trong thời gian truy vấn: Nó đã tạo 1 mã thông báo:walmart
(trong khi không rõ lý do tại sao nó chỉ tạo ra 1 mã thông báo), tôi không hiểu tại sao nó không khớp cho rằngwalmart
được chứa trong cả thẻ truy vấn và chỉ mục.Vấn đề mà tôi đã đề cập ở đây chỉ là một trường hợp sử dụng duy nhất. Có những người hơn một chút phức tạp như:
Words với dấu nháy: "Mc Donalds", "Mc Donald", "McDonald", "Mc Donalds", "Mc Donald", "McDonald"
Words với các dấu câu khác nhau: "Mc-Donald Engineering Company, Inc."
Nói chung, cách tốt nhất để đi xung quanh mô hình hóa các schema với loại yêu cầu là gì? NGrams? Lập chỉ mục cùng một dữ liệu trong các trường khác nhau (theo các định dạng khác nhau) và sử dụng chỉ thị copyField (https://wiki.apache.org/solr/SchemaXml#Indexing_same_data_in_multiple_fields)? Hiệu quả của việc này là gì?
EDIT: Toán tử mặc định trong lược đồ Solr của tôi là AND. Tôi không thể đổi thành OR.
Đi từ 4.4 đến 4.10 là nâng cấp ... :) – cheffe
@cheffe thats weird .. Tôi nghĩ 4.4 lớn hơn 4.10 :) –